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

时间:2013-07-23 00:23:44

标签: c# .net mono portable-class-library

处理代码我正在转换为Mono中的可移植类库,我遇到了一个使用System.IO.WebExceptionStatus来切换获取响应后要执行的操作的部分。我的问题只是这个枚举的一部分作为PCL支持。

e.g。 ConnectionClosed不在PCL构建的枚举中。

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

2 个答案:

答案 0 :(得分:1)

1)基于the documentation,Windows应用商店应用配置文件仅支持一组有限的项目。在这种情况下,PCL只能支持这组项目。

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

答案 1 :(得分:0)

如果你的意思是--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");                          
}