我創建一個異常類這樣的:如何避免在以下代碼中強制轉換爲(ServiceException)?
public class ServiceException : ApplicationException {
public Dictionary<string, string> Errors { get; set; }
public ServiceException(Exception ex) : base("Service Exception", ex) {
Errors = new Dictionary<string, string>();
}
public ServiceException() : this(null) {}
}
下面的代碼失敗:
protected void log(Exception ex)
{
if (ex is ServiceException)
{
var y = (ServiceException)
ModelState.Merge(ex.Errors);
}
else
{
Trace.Write(ex);
ModelState.AddModelError("", "Database access error: " + ex.Message);
}
}
它生成上編譯以下錯誤:
錯誤5 'System.Exception的'不包含「錯誤」 的定義,並且沒有接受 類型的第一個參數的擴展方法'Errors''System.Exception'c烏爾德找到(是否缺少using指令 或程序集引用?)
我通過以下操作固定它:
if (ex is ServiceException)
{
var y = (ServiceException)ex;
ModelState.Merge(y.Errors);
}
有一些辦法,我可以使用避免這種亂碼一個變量y然後鑄造它?沒有聲明中間變量y,代碼不會通過語法檢查。
你需要口齒不清講:ModelState.Merge(((ServiceException)除息).Errors); – 2011-12-20 04:45:28
在C#中,一種方法或者你必須使用一個強制轉換來使編譯器感到高興。 – Roman 2011-12-20 04:47:02