c# - 针对 Compact Net Framework 3.5 编译时出错 - 方法 'GetString' 没有重载采用 '1' 参数

Posted

技术标签:

【中文标题】c# - 针对 Compact Net Framework 3.5 编译时出错 - 方法 \'GetString\' 没有重载采用 \'1\' 参数【英文标题】:c# - error compiling targeting Compact Net Framework 3.5 - No overload for method 'GetString' takes '1' argumentsc# - 针对 Compact Net Framework 3.5 编译时出错 - 方法 'GetString' 没有重载采用 '1' 参数 【发布时间】:2010-09-28 23:51:53 【问题描述】:

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

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

其中一个错误是该问题主题中引用的错误,即“方法'GetString'没有重载需要'1'参数”。如上所述,我对 C# 不太了解,所以我将在线错误的类转换为 VB-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, moster67

【问题讨论】:

【参考方案1】:

CF .NET 要求您使用签名:Encoding.GetString Method (array[], Int32 index, Int32 count) 所以尝试使用:

...GetString(b, 0, b.Length);

【讨论】:

【参考方案2】:

如果您在 MSDN 上查找 Encoding 类,您会发现有关紧凑框架中方法可用性的信息。

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 属性,因此您应该准备就绪。

但事情就是这样。 MS 有时会从类实现中删除一些方法,或者准确地说是重载。

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

顺便说一句,正如我在第一篇文章中提到的,我遇到了另一个问题,我打算在另一个线程中询问,并且不允许我为 CF.NET 构建库,即行:

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

在这种情况下,问题在于 CF.NET 无法识别“BodyName”。我找不到任何替代方法或解决方法来获取使用的字符集(BodyName 检索此信息),所以最后我只是为其分配了一个固定值(iso-8859-1)。这意味着不幸的是,该库不会处理所有不同的字符集,但至少代码不会中断并且我能够编译它。无论如何,对我来说这已经足够了,因为我的应用程序不关心文本消息 - 它使用电子邮件来发送和获取附件(类似于 Gmail 驱动器,但使用我自己的提供商)。

再次感谢您。

亲切的问候, moster67

【讨论】:

你为什么不发布另一个问题? '因为这是另一种 CF.NET 不支持方法的情况。此外,该课程使用 C#,并且由于我对 C# 的了解几乎为零,因此我几乎没有可能更改它。所以,我只是给字符集一个固定的值来解决我的问题 - 实际上最后我将它分配给 utf-8

以上是关于c# - 针对 Compact Net Framework 3.5 编译时出错 - 方法 'GetString' 没有重载采用 '1' 参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 应用程序部署 SQL Server Compact

.Net Core、Portable、Standard、Compact、UWP 和 PCL 之间的区别?

如何为 SQL Server 和 SQL Server Compact 编写相同的 ado.net 代码?

C#基础.net Frame 环境及变量存储

从 Visual Studio C# 和 SQL Compact(连接、选择、插入)开始?

如何获取适用于 C# 的 Windows Compact 2013 的 Silverlight 或 XAML?