c # - erro compilar direcionamento Compact Framework Net 3.5 - Não sobrecarga para o método 'GetString' toma '1' argumentos
-
03-07-2019 - |
Pergunta
Na verdade, tenho duas perguntas sobre o mesmo problema, mas eu acho que é melhor para separá-los desde que eu não acho que eles estão relacionados.
Fundo: Estou escrevendo um software Windows Mobile em VB.NET que entre suas tarefas precisa se conectar a um servidor de correio para enviar e recuperar e-mails. Como resultado, eu também precisa de um Mime-parser (codificar e descodificar) os e-mails, a fim de obter os anexos. Primeiro eu pensei, eu iria escrever um pequeno "hack" para lidar com esta questão (usando a corda de análise de ordinário), mas então eu vi um projeto, escrito em C #, no CodeProject que eu pensei que iria implementar em minha solução. Eu não sei muito sobre C #, então eu simplesmente fez um fora de classe biblioteca de classes e usou-o no meu-projeto VB.NET. Esta biblioteca funciona muito bem quando estou visando o Net Framework no Windows-computadores normais no entanto, quando eu estava indo para fazer a mesma biblioteca visando o Net Framework Compact, eu corri em problemas. Isso é natural já que a Net Framework Compact tem mais limites, mas eu realmente não se que muitos erros -. Apenas dois embora repetida em vários lugares do código
Um dos erros é aquele citado no assunto desta questão ou seja, "Não sobrecarga para o método 'GetString' toma '1' argumentos". Como mencionado acima, eu não sei muito sobre C #, então eu convertido a classe com o erro on-line em VB-NET mas ainda assim eu não entendo muito .. Aqui é a função que dá acima erro indicado:
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 o código-fonte completo é necessário para esta classe, então eu posso postá-lo em outra mensagem neste segmento ou você pode encontrá-lo fazendo o download do código no web-site mencionado acima e por ter um olhar para a classe chamado MimeCode.cs.
Qualquer pessoa que pode me ajudar? Posso reescrever acima função de alguma forma para superar este problema?
Eu agradeço antecipadamente por sua ajuda.
Um abraço e um Feliz Ano Novo para todos vocês.
Rgds, moster67
Solução
CF .NET requer que você use a assinatura: Método Encoding.GetString (array [], índice Int32, contagem Int32) de modo a tentar usar:
...GetString(b, 0, b.Length);
Outras dicas
Se você olhar para cima a classe Encoding no MSDN você encontrará informações sobre a disponibilidade de métodos na estrutura compacta.
http://msdn.microsoft.com /en-us/library/system.text.encoding.default.aspx
No seu caso a propriedade System.Text.Encoding.Default é suportado pelo .NET Compact Framework 3.5, 2.0, 1.0, assim você deve estar tudo pronto.
Mas aqui é a coisa. MS por vezes cair de de métodos de implementação de classe, ou para ser sobrecargas precisos.
Olhando para a documentação http://msdn.microsoft.com/en- us / library / system.text.encoding.getstring.aspx você pode dizer, olhando para os ícones (imagens pequenas para a esquerda) que, enquanto o .NET Compact Framework suporta a classe de codificação, algumas sobrecargas foi removido.
Quando você passar a matriz byte [] para o método GetString, não pode achar que a sobrecarga assim que você tem que adicionar um offset int e int count.
O quadro compacto provavelmente não suporta a sobrecarga que leva apenas um array de bytes. Tente a sobrecarga que utiliza a matriz de bytes, um índice de início e uma contagem e dar-lhe 0, quando o índice de início e b.Length como o comprimento.
Graças a Michael, John e Rune para responder à minha pergunta. Usando suas sugestões, resolvi o problema e consegui compilar / criar a biblioteca visando o CF.NET 3.5. Graças também ao ctacke para editar a minha pergunta e torná-lo mais legível.
BTW, como mencionado no meu primeiro post, eu tinha outro problema que eu queria perguntar em outro segmento e que não permitam-me para criar a biblioteca para CF.NET, ou seja, a linha:
m_charset = System.Text.Encoding.Default.BodyName;
Neste caso, o problema é que o CF.NET não reconhece "BodyName". Não conseguimos encontrar formas alternativas ou soluções alternativas para obter o conjunto de caracteres usado (BodyName recupera esta informação) para que no final eu simplesmente atribuídos a ele um valor fixo (iso-8859-1). Isto significa, infelizmente, que a biblioteca não irá lidar com todos os diferentes personagens-sets lá fora, mas pelo menos o código não vai quebrar e eu era capaz de compilá-lo. Em qualquer caso, para mim é o suficiente desde a minha aplicação não se preocupa com o texto-mensagens - é usar e-mails para enviar e obter anexos (semelhante ao Gmail-drive, mas com o meu próprio provedor)
.Obrigado mais uma vez.
Atenciosamente, moster67