是否有解决Enum PCL不支持的方法

本文关键字:不支持 方法 PCL Enum 解决 是否 | 更新日期: 2023-09-27 18:24:37

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

例如CCD_ 2不在PCL构建的枚举内。

所以有两个问题:
1) 为什么只支持Enum的一部分(我在任何地方都找不到原因)
2) 有没有PCL的变通方法可以让我有大致的行为?

是否有解决Enum PCL不支持的方法

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

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

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

  • System.Object
    • System.Exception
    • System.SystemException
    • System.InvalidOperationException
    • System.Net.WebException

.NET Framework 4.5、4、3.5、3.0、2.0、1.1、1.0|客户端配置文件:4,3.5 SP1``可移植类库.NET for Windows应用商店应用程序支持于: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");                          
}