簡體   English   中英

c# - 錯誤編譯目標Compact Net Framework 3.5 - 方法'GetString'的重載沒有'1'參數

[英]c# - error compiling targeting Compact Net Framework 3.5 - No overload for method 'GetString' takes '1' arguments

我實際上有兩個關於同一問題的問題,但我認為最好將它們分開,因為我認為它們並不相關。

背景:我正在VB.NET中編寫一個Windows Mobile軟件,其中任務需要連接到郵件服務器以發送和檢索電子郵件。 因此,我還需要一個Mime解析器(用於解碼和編碼)電子郵件以獲取附件。 首先我想,我會寫一個小的“hack”來處理這個問題(使用普通的字符串解析),但后來我在CodeProject看到了一個用C#編寫的項目,我認為我會在我的解決方案中實現。 我對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

CF .NET要求您使用簽名:Encoding.GetString方法(array [],Int32索引,Int32計數),所以嘗試使用:

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

如果在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 offset和int count。

緊湊框架可能不支持僅占用字節數組的重載。 嘗試使用字節數組,起始索引和計數的重載,並將0作為起始索引,將b.Length作為長度。

感謝Michael,John和Rune回答我的問題。 通過使用您的建議,我解決了問題,並設法編譯/構建面向CF.NET 3.5的庫。 還要感謝ctacke編輯我的問題並使其更具可讀性。

BTW,正如我在第一篇文章中提到的,我有另一個問題,我打算在另一個線程中詢問,哪個不允許我為CF.NET構建庫,即行:

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

在這種情況下,問題是CF.NET不識別“BodyName”。 我找不到任何替代方法或變通方法來獲取所使用的字符集(BodyName檢索此信息),所以最后我只是為它分配了一個固定值(iso-8859-1)。 這意味着不幸的是,庫不會處理所有不同的字符集,但至少代碼不會中斷,我能夠編譯它。 在任何情況下,對我來說這已經足夠,因為我的應用程序不關心文本消息 - 它使用電子郵件發送和獲取附件(類似於Gmail驅動器,但與我自己的提供商)。

再一次感謝你。

親切的問候,moster67

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM