0

(string)objectオブジェクト自体を変更するような明示的な変換はありますか? ASP.NET でビジュアル C# をコーディングしているときに、奇妙なことに遭遇しました。

私はタイプする:

NameValueCollection coll;
coll = Request.ServerVariables;
LoginStatue1.Text += coll.GetValues("REMOTE_USER")[0] + "." + (string)coll["REMOTE_USER"] + "." + coll.GetValues("REMOTE_USER")[0];

結果は

..ユーザー名

つまり、最初coll.GetValues("REMOTE_USER")[0]は何も取得せず(string)coll["REMOTE_USER"]、2 番目coll.GetValues("REMOTE_USER")[0]はユーザー名を取得します。

では、明示的な変換によってオブジェクト自体が変更されるのでしょうか?

4

2 に答える 2

0

はい、もちろん、明示的な変換はオブジェクトを変更します。まず、オブジェクトを文字列にキャストすることはできません。C# では許可されていません。

キャストできる場合、オブジェクトは現在のデータ型のように動作します。

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
        char j = (char)i;
        j--;
        Console.WriteLine(j);
    }
}

出力: ? 動作が変更されたため、出力は -1 ではないことに注意してください。

于 2013-10-18T05:12:42.483 に答える
0

物事を明確にするために、次のようなことを試すことをお勧めします。

LoginStatue1.Text =  string.Format("1st=({0}),2nd=({1}),3rd=({2})", 
coll.GetValues("REMOTE_USER")[0],  
(string) coll["REMOTE_USER"], 
coll.GetValues("REMOTE_USER")[0]);

結果として何が得られますか?1枚目と3枚目は同じだと思います。

たとえば、この自己完結型の例を実行すると:

        NameValueCollection  coll;
        coll = new NameValueCollection();
        coll.Add("REMOTE_USER", "Tom");
        coll.Add("REMOTE_USER", "Dick");
        coll.Add("REMOTE_USER", "Harry");
        LoginStatue1.Text =  string.Format("1st=({0}),2nd=({1}),3rd=({2})", coll.GetValues("REMOTE_USER")[0],  (string) coll["REMOTE_USER"], coll.GetValues("REMOTE_USER")[0]);

私は得る: 1st=(トム)、2nd=(トム、ディック、ハリー)、3rd=(トム)

于 2013-10-18T05:36:31.487 に答える