扩展异常部分 class
Extending Exception partial class
我正在使用 wsdl.exe 生成的示例 SOAP 代码。对象 lastError
声明如下:
private Exception lastError;
Visual Studio 在此行
上构建时出错
String msg = lastError.Message;
说
'Exception' does not contain a definition for 'Message' and no extension method 'Message' accepting a first argument of type 'Exception' could be found (are you missing a using directive or an assembly reference?)
:
wsdl.exe生成的Exception
class看起来像这样:
/// <remarks/>
[System.Xml.Serialization.XmlIncludeAttribute(typeof(NestedException))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(PersistenceException))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(BbSecurityException))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://gradebook.ws.blackboard")]
public partial class Exception {
private object exception1Field;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Exception", IsNullable=true)]
public object Exception1 {
get {
return this.exception1Field;
}
set {
this.exception1Field = value;
}
}
}
partial
classes 不会通过共享名称自动扩展任何内置或非部分 classes。如果您希望上面的 Exception
class 扩展 System.Exception
,那么最简单的方法是添加另一个部分 class 并显式扩展它:
(在其他文件中)
public partial class Exception : System.Exception
{
}
你应该知道有一个名为 Exception
的 class 的问题。从技术上讲,你不应该真正捕捉到通用 Exception
,但如果你的命名空间中有这样的东西,你可能不会捕捉到你认为的异常:
public void SomeMethod()
{
try
{
DoSomethingThatExcepts();
}
catch (Exception e)
{
//You are actually catching the defined Exception, not System.Exception
}
}
因此,无论您在何处使用 System.Exception
,您都可能必须完全限定名称。
我正在使用 wsdl.exe 生成的示例 SOAP 代码。对象 lastError
声明如下:
private Exception lastError;
Visual Studio 在此行
上构建时出错String msg = lastError.Message;
说
'Exception' does not contain a definition for 'Message' and no extension method 'Message' accepting a first argument of type 'Exception' could be found (are you missing a using directive or an assembly reference?)
:
wsdl.exe生成的Exception
class看起来像这样:
/// <remarks/>
[System.Xml.Serialization.XmlIncludeAttribute(typeof(NestedException))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(PersistenceException))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(BbSecurityException))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://gradebook.ws.blackboard")]
public partial class Exception {
private object exception1Field;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Exception", IsNullable=true)]
public object Exception1 {
get {
return this.exception1Field;
}
set {
this.exception1Field = value;
}
}
}
partial
classes 不会通过共享名称自动扩展任何内置或非部分 classes。如果您希望上面的 Exception
class 扩展 System.Exception
,那么最简单的方法是添加另一个部分 class 并显式扩展它:
(在其他文件中)
public partial class Exception : System.Exception
{
}
你应该知道有一个名为 Exception
的 class 的问题。从技术上讲,你不应该真正捕捉到通用 Exception
,但如果你的命名空间中有这样的东西,你可能不会捕捉到你认为的异常:
public void SomeMethod()
{
try
{
DoSomethingThatExcepts();
}
catch (Exception e)
{
//You are actually catching the defined Exception, not System.Exception
}
}
因此,无论您在何处使用 System.Exception
,您都可能必须完全限定名称。