代码之家  ›  专栏  ›  技术社区  ›  moster67

c#-针对Compact Net Framework 3.5编译时出错-方法“GetString”没有重载接受“1”参数

  •  2
  • moster67  · 技术社区  · 17 年前

    事实上,我有两个关于同一个问题的问题,但我认为最好将它们分开,因为我认为它们不相关。

    背景: 我正在VB.NET中编写一个Windows Mobile软件,它的任务之一是连接到邮件服务器以发送和检索电子邮件。因此,我还需要一个Mime解析器(用于对电子邮件进行解码和编码)来获取附件。首先我想,我会编写一个小的“hack”来处理这个问题(使用普通的字符串解析),但后来我看到了一个用C#编写的项目, at CodeProject 我认为我会将其应用到我的解决方案中。我对C不太了解,所以我只是用这些类制作了一个类库,并将其用于我的VB.NET项目中。当我在普通windows计算机上针对Net Framework时,该库工作得非常好。然而,当我准备针对Compact Net Framework制作相同的库时,我遇到了麻烦。这是很自然的,因为Compact Net框架有更多的限制,但实际上我没有得到那么多的错误——只有两个错误,尽管在代码中的不同地方重复了。

    public virtual string DecodeToString(string s)
    {
      byte[] b = DecodeToBytes(s);
      if(m_charset != null)
      {
        //ERROR ON THIS LINE
        return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
      }
      else
      {
        m_charset = System.Text.Encoding.Default.BodyName;
        //ERROR ON THIS LINE
        return System.Text.Encoding.Default.GetString(b);
      }
    }
    

    如果这个类需要完整的源代码,那么我可以在这个线程的另一条消息中发布它,或者您可以通过在上面提到的网站下载代码并查看名为MimeCode.cs的类来找到它。

    有人能帮我吗?我可以重写上面的函数来克服这个问题吗?

    向你们所有人致以亲切的问候,并祝你们新年快乐。

    Rgds,

    4 回复  |  直到 17 年前
        1
  •  9
  •   Michael Bray    17 年前

    CF.NET要求您使用signature:Encoding.GetString方法(数组[],Int32索引,Int32计数),因此请尝试使用:

    ...GetString(b, 0, b.Length);
    
        2
  •  2
  •   John Leidegren    17 年前

    http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx

    在您的情况下,.NET Compact Framework 3.5、2.0、1.0支持System.Text.Encoding.Default属性,因此您应该都已设置好。

    查看文档 http://msdn.microsoft.com/en-us/library/system.text.encoding.getstring.aspx 通过查看图标(左侧的小图像),可以看出尽管.NET Compact Framework支持编码类,但一些重载已被删除。

    将byte[]数组传递给GetString方法时,它找不到该重载,因此必须添加int偏移量和int计数。

        3
  •  1
  •   Rune Grimstad    17 年前

    紧凑型框架可能不支持只占用字节数组的重载。尝试采用字节数组、开始索引和计数的重载,并将其设置为0作为开始索引,b.Length作为长度。

        4
  •  0
  •   moster67    17 年前

    感谢Michael、John和Rune回答我的问题。通过使用您的建议,我解决了问题,并成功编译/构建了针对CF.NET 3.5的库。还感谢ctacke编辑我的问题,使其更具可读性。

    m_charset = System.Text.Encoding.Default.BodyName;
    

    再次感谢你。

    大多数67