1

私のコードでは、適切な css ファイルを充電するためのブラウザ バージョンを取得しようとしていますが、このコードは機能せず、エラーも表示されません...

最初に Convert.ToInt32 を試してみましたが、うまくいきません...

public ActionResult Index()
        {
            ViewBag.logged = false;
            ViewBag.BrowserName = Request.Browser.Browser.ToString();
            Int32 v = 0;
            string version = Request.Browser.Version;

            if (version != null)
            {
                bool result  = Int32.TryParse(version, out v);
            }
            ViewBag.BrowserVersion = v;
            return View();
        }

私のデバッガで:

version => string : "23.0"
v => int 0
result => false
Request.Browser.Version => string "23.0"
4

5 に答える 5

3

これは仕様によるものです。

バージョン文字列の解析は、System.Versionの方がうまく機能します。

または、それをフロートに解析してから、Int32 へのロスレス変換が可能かどうかを確認することもできます。

于 2013-08-30T15:27:11.620 に答える
2

バージョン文字列が整数または 10 進数になるとは想定できません。7.0bブラウザは、そのバージョンとして完全に報告できます。intfloatdecimalまたはのいずれSystem.Versionもこれを表すことはできません。

メジャー バージョン番号とマイナー バージョン番号だけを気にする場合は、オブジェクトのタイプが であると仮定して、オブジェクトのMajorVersionプロパティとMinorVersionプロパティを使用できます。フレームワークが解析を行っているので、信頼できるはずです。BrowserHttpBrowserCapabilities

于 2013-08-30T15:34:56.917 に答える
1

23.0 は int ではないため、false が返されます。したがって、decimal、double、または float で試すことができます。

decimal v = 0;
string version = "23.0";

Decimal.TryParse(version, out v);
于 2013-08-30T15:24:45.367 に答える
1

ほぼ2年が経ちましたが、誰もこれに正しく答えていません。質問は単純です。「なぜ false を返すのですか?」

文字列が整数ではなく、倍精度または小数であるため、この質問はすでに回答されています。設計上、TryParse は文字列から整数型の完全一致を取得しようとします。そうでない場合は false を返し、文字列 ("23.0") は完全一致ではありません。

バージョン文字列を数値に変換する際の解決策を見つけようとしている場合は、文字列内の 1 つのドット (.) を除く数値以外を除外し、残っているものを 10 進数/倍精度に変換します。 . この変換の後、整数に変換してみることができます。スターリングを既に double/decimal に変換しているため、パラメーターを文字列形式にする必要があるため、TryParse を使用できなくなりました。その後、Try ブロック内で Convert.ToInt32 を使用できます。

于 2015-07-30T00:28:04.943 に答える