c#-Compact Net Framework 3.5を対象としたコンパイルエラー-メソッド 'GetString'のオーバーロードは '1'引数をとらない

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

質問

実際には同じ問題に関して2つの質問がありますが、それらは関連しているとは思わないので、それらを分離する方が良いと思います。

背景: 私はVB.NETでWindows Mobileソフトウェアを書いていますが、そのタスクの中で、電子メールを送信および取得するためにメールサーバーに接続する必要があります。その結果、添付ファイルを取得するために、電子メールのMime-parser(デコードおよびエンコード用)も必要です。最初に、小さな「ハック」を書くと思った。 (通常の文字列解析を使用して)この問題を処理するために、C#で記述されたプロジェクトを見ました。 = 25&noise = 3&sort = Position&view = Quick&select = 1202157 "rel =" nofollow noreferrer "> CodeProject で、これをソリューションに実装すると思いました。私はC#についてあまり知らないので、クラスからクラスライブラリを作成し、それをVB.NETプロジェクトで使用しました。このライブラリは、通常のWindowsコンピューターでNet Frameworkをターゲットにしているときに非常にうまく機能しますが、Compact Net Frameworkをターゲットとする同じライブラリを作成しようとすると、トラブルに遭遇しました。 Compact Net Frameworkにはより多くの制限があるため、これは自然なことですが、実際にはそれほど多くのエラーは発生しませんでした-コード内のさまざまな場所で繰り返されるのは2つだけです。

エラーの1つは、この質問の主題で引用されているものです。つまり、「メソッド '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);
  }
}

このクラスに完全なソースコードが必要な場合は、このスレッドの別のメッセージに投稿するか、上記のWebサイトでコードをダウンロードしてクラスを見て見つけることができます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

あなたの場合、System.Text.Encoding.Defaultプロパティは.NET Compact Framework 3.5、2.0、1.0でサポートされているため、すべて設定する必要があります。

しかし、ここにあります。 MSは、クラス実装からメソッドを削除したり、正確にオーバーロードしたりすることがあります。

ドキュメントを見る http://msdn.microsoft.com/en- us / library / system.text.encoding.getstring.aspx では、アイコン(左側の小さな画像)を見ると、.NET Compact Frameworkがエンコードクラスをサポートしているが、いくつかのオーバーロードが削除されていることがわかります。

byte []配列をGetStringメソッドに渡すと、そのオーバーロードが見つからないため、intオフセットとintカウントを追加する必要があります。

おそらくコンパクトフレームワークは、バイト配列のみを受け取るオーバーロードをサポートしていません。バイト配列、開始インデックス、およびカウントを取るオーバーロードを試して、開始インデックスとして0を、長さとしてb.Lengthを指定します。

私の質問に答えてくれた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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top