1

在处理我正在转换为 Mono 中的可移植类库的代码时,我遇到了一个部分,用于System.IO.WebExceptionStatus在得到响应后切换要做什么。我的问题是仅支持此枚举的一部分作为 PCL。

egConnectionClosed不在 PCL 构建的枚举中。

所以真的有两个问题:
1)为什么只支持 Enum 的一部分(我在任何地方都找不到原因)?
2) 是否有 PCL 解决方法可以让我有近似的行为?

4

2 回答 2

1

1) 根据文档,Windows Store 应用程序配置文件仅支持有限的项目集。在这种情况下,PCL 只能支持该组项目。

2)如果您的应用程序确实需要处理其他项目,请不要将那段代码放在 PCL 中。

于 2013-07-23T02:33:15.450 回答
0

如果您的意思是 - System.Net.WebException "WebException Class"

  • 系统对象
    • 系统异常
    • System.SystemException
    • System.InvalidOperationException
    • System.Net.WebException

.NET 框架 4.5、4、3.5、3.0、2.0、1.1、1.0| 客户端配置文件:4、3.5 SP1`` 适用于 Windows 应用商店应用程序的便携式类库 .NET 受支持:Windows 8

它被说了一百万次,但 pcl 它只是平台实现之间公分母或交集的包装器。

我认为这必须是因为[__DynamicallyInvokable]属性

与 Stream.Close() 与 Stream.Dispose() 类似的情况,您将需要切换使用或找到解决方法,在枚举的情况下,可以强制转换为 int 并检查它的值。

// Type: System.Net.WebExceptionStatus
// Assembly: System, Version=4.0.0.0, Culture=neutral, 
namespace System.Net
{
  public enum WebExceptionStatus
  {
    Success = 0,
    ConnectFailure = 2,
    SendFailure = 4,
    RequestCanceled = 6,
    Pending = 13,
    UnknownError = 16,
    MessageLengthLimitExceeded = 17,
  }
}

 try
{
//Do something that can throw WebException ? 
}
catch (WebException e)
{
if((int)e.Status  == 0)
Debug.WriteLine("Success"); 
}

var test = new Class1.Test();
test.Run();

或尝试已知类型?

try                        
{
//Do something that can throw WebException ? 
}
catch (WebException e)
{
if (e.Status == (WebExceptionStatus.Success) ||
    e.Status == (WebExceptionStatus.ConnectFailure) ||
    e.Status == (WebExceptionStatus.RequestCanceled) ||
    e.Status == (WebExceptionStatus.Pending) ||
    e.Status == (WebExceptionStatus.UnknownError) ||
    e.Status == (WebExceptionStatus.MessageLengthLimitExceeded))
    Debug.WriteLine("Ok");
else
    Debug.WriteLine("Its another WebException");                          
}
于 2013-07-24T04:14:35.850 回答