Exception.HResult 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置 HRESULT(一个分配给特定异常的编码数字值)。
public: property int HResult { public:
int get(); protected:
void set(int value); };
public:
property int HResult { int get(); void set(int value); };
protected:
property int HResult { int get(); void set(int value); };
public int HResult { get; protected set; }
public int HResult { get; set; }
protected int HResult { get; set; }
member this.HResult : int with get, set
Public Property HResult As Integer
Protected Property HResult As Integer
属性值
HRESULT 值。
示例
下面的代码示例定义一个派生 Exception
类,该类将 HResult
属性设置为其构造函数中的自定义值。
// 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()
{
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()
*/
// 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()
{
// 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.
open System
let secondLevelHResult = 0x81234567
// Create the derived exception class.
// Set HResult for this exception, and include it in the exception message.
type SecondLevelException(message, inner) as this =
inherit Exception($"(HRESULT:0x{secondLevelHResult:X8}) %s{message}", inner)
do
this.HResult <- secondLevelHResult
// The following forces a division by 0 and throws a second exception.
try
try
let zero = 0
let ecks = 1 / zero
()
with ex ->
raise (SecondLevelException("Forced a division by 0 and threw a second exception.", ex) )
with ex ->
printfn $"{ex}"
// This example of Exception.HResult generates the following output.
//
// NDP_UE_FS+SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 and
// threw a second exception. ---> System.DivideByZeroException: Attempted to divi
// de by zero.
// at <StartupCode$fs>.$NDP_UE_FS.main@()
// --- End of inner exception stack trace ---
// at <StartupCode$fs>.$NDP_UE_FS.main@()
' Example for the Exception.HResult property.
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
End Class
Module HResultDemo
Sub Main()
' 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
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()
注解
HRESULT 是可拆分为三个不同字段的 32 位值:一个严重性代码、一个设备代码和一个错误代码。 严重性代码指示返回值是表示信息、警告还是错误。 设备代码标识导致错误的系统区域。 错误代码是分配来表示异常的唯一编号。 每个异常都映射到不同的 HRESULT。 当托管代码引发异常时,运行时会将 HRESULT 传递给 COM 客户端。 当非托管代码返回错误时,HRESULT 将转换为异常,然后由运行时引发。 有关 HRESULT 值及其相应的.NET Framework异常的信息,请参阅如何:映射 HRESULT 和异常。 有关最有可能遇到的值的列表,请参阅 Windows 文档中的 常见 HRESULT 值 。
从 .NET Framework 4.5 开始,HResult属性的资源库受保护,而其 getter 是公共的。 在早期版本的 .NET Framework中,getter 和 setter 都受到保护。