c # - compilazione dell'errore indirizzata a Compact Net Framework 3.5 - Nessun sovraccarico per il metodo 'GetString' accetta argomenti '1'

StackOverflow https://stackoverflow.com/questions/402648

Domanda

In realtà ho due domande sullo stesso problema, ma penso che sia meglio separarle poiché non penso che siano correlate.

Sfondo: Sto scrivendo un software Windows Mobile in VB.NET che, tra le sue attività, deve connettersi a un server di posta per l'invio e il recupero di e-mail. Di conseguenza, ho anche bisogno di un Mime-parser (per la decodifica e la codifica) delle e-mail per ottenere gli allegati. Per prima cosa ho pensato, avrei scritto un piccolo "hack" per gestire questo problema (usando il normale parsing delle stringhe) ma poi ho visto un progetto, scritto in C #, su CodeProject che ho pensato di implementare nella mia soluzione. Non so molto di C #, quindi ho semplicemente creato una libreria di classi dalle classi e l'ho usata nel mio progetto VB.NET. Questa libreria funziona molto bene quando sto prendendo di mira il Net Framework su normali computer Windows, ma quando stavo per realizzare la stessa libreria destinata al Compact Net Framework, ho riscontrato problemi. Ciò è naturale poiché Compact Net Framework ha più limiti, ma in realtà non ho riscontrato molti errori, solo due, sebbene ripetuti in vari punti del codice.

Uno degli errori è quello citato nell'oggetto di questa domanda, vale a dire "Nessun sovraccarico per il metodo" GetString "accetta argomenti" 1 ". Come accennato in precedenza, non so molto su C #, quindi ho convertito la classe con l'errore online in VB-NET ma ancora non capisco molto .. Ecco la funzione che fornisce l'errore sopra indicato:

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);
  }
}

Se il codice sorgente completo è necessario per questa classe, allora posso pubblicarlo in un altro messaggio in questo thread o puoi trovarlo scaricando il codice dal sito web sopra menzionato e dando un'occhiata alla classe chiamato MimeCode.cs.

Chiunque mi può aiutare? Posso riscrivere la funzione sopra in qualche modo per superare questo problema?

Ti ringrazio anticipatamente per il tuo aiuto.

Cordiali saluti e un felice anno nuovo a tutti voi.

Rgds, moster67

È stato utile?

Soluzione

CF .NET richiede l'uso della firma: Metodo Encoding.GetString (array [], indice Int32, conteggio Int32), quindi prova a utilizzare:

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

Altri suggerimenti

Se cerchi la classe Encoding su MSDN troverai informazioni sulla disponibilità dei metodi nel framework compatto.

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

Nel tuo caso la proprietà System.Text.Encoding.Default è supportata da .NET Compact Framework 3.5, 2.0, 1.0, quindi dovresti essere pronto.

Ma ecco la cosa. Gli Stati membri a volte abbandonano i metodi dall'implementazione della classe, o per essere precisi sovraccarichi.

Guardando la documentazione http://msdn.microsoft.com/en- us / library / system.text.encoding.getstring.aspx puoi vedere guardando le icone (piccole immagini a sinistra) che mentre .NET Compact Framework supporta la classe di codifica, alcuni sovraccarichi sono stati rimossi.

Quando si passa l'array byte [] al metodo GetString, non è possibile trovare quel sovraccarico, quindi è necessario aggiungere un offset int e un conteggio int.

Il framework compatto probabilmente non supporta il sovraccarico che richiede solo un array di byte. Prova il sovraccarico che accetta l'array di byte, un indice iniziale e un conteggio e dagli 0 come indice iniziale e b.Length come lunghezza.

Grazie a Michael, John e Rune per aver risposto alla mia domanda. Utilizzando i tuoi suggerimenti, ho risolto il problema e sono riuscito a compilare / creare la libreria destinata a CF.NET 3.5. Grazie anche a ctacke per aver modificato la mia domanda e averla resa più leggibile.

A proposito, come menzionato nel mio primo post, ho avuto un altro problema che intendevo chiedere in un altro thread e che non mi permetteva di creare la libreria per CF.NET, vale a dire la riga:

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

In questo caso, il problema è che CF.NET non riconosce " BodyName " ;. Non sono riuscito a trovare modi alternativi o soluzioni alternative per ottenere il set di caratteri utilizzato (BodyName recupera queste informazioni) quindi alla fine gli ho semplicemente assegnato un valore fisso (iso-8859-1). Questo significa purtroppo che la libreria non gestirà tutti i diversi set di caratteri, ma almeno il codice non si romperà e sono stato in grado di compilarlo. In ogni caso, per me è abbastanza poiché la mia applicazione non si preoccupa dei messaggi di testo: utilizza e-mail per inviare e ottenere allegati (simile a Gmail-drive ma con il mio provider).

Grazie ancora.

Cordiali saluti, moster67

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top