1

私は C# で IMAP と POP3 メールを扱っていますが、奇妙な問題に遭遇しました。2 つのタイプの uid (一意の ID) は異なるタイプです。IMAP は long 変数で、POP は文字列です。そのため、メールをダウンロードして保存する機能はそれ以外は同じです。foreach ループを実行する必要がありますが、変更されるのは最初の行だけです。

foreach (long uid in uids) //for the imap
foreach (string uid in uids) //for the pop

最初に uid を宣言できないので、関数全体ではなく、この行だけを複製する方法はありますか?

4

4 に答える 4

2

あなたがそれをどのように使用するかについてのあなたの声明に基づいて:

foreach (object uid in uids)
{
    string uidStr = uid.ToString();
    // use uidStr, e.g.
    string myPath = Path.Combine(@"C:\mail\", uidStr);

または:

foreach (string uid in uids.Select(x => x.ToString()))
于 2013-05-07T13:53:21.650 に答える
1

やるだけ

foreach (long uid in uids.OfType<long>())
foreach (string uid in uids.OfType<string>())

(しかし、あなたの質問からは、より詳細な回答を得るのに十分な文脈がありません。)

[編集]

あなたの意味を正しく理解すれば、プロセスメソッドを次のように定義できます。

static void process(IEnumerable<string> uids)
{
    foreach (string uid in uids)
    {
        // ...
    }
}

そして、次のように呼び出します。

process(uids.OfType<int>().Select(uid => uid.ToString()));
process(uids.OfType<string>());
于 2013-05-07T13:51:44.220 に答える
-1

この目的でdynamicを使用できます。

foreach (dynamic uid in uids)
于 2013-05-07T13:49:46.393 に答える
-1

varの使用はどうなりましたか??

foreach (var uid in uids)

?? または私は質問を完全に誤解していますか?

于 2013-05-07T13:56:44.560 に答える