アップデート
私は問題を発見しました.例外は同じフォームの2番目のフィールドから発生しました.(空だったので).実際には、別の文字列を解析しようとしていたとき...時間を無駄にして申し訳ありません。
元の質問
私はこの問題に完全に唖然としています。私は基本的に実行int.Parse("32")
していますが、FormatException
. 問題のコードは次のとおりです。
private double BindGeo(string value)
{
Regex r = new Regex(@"\D*(?<deg>\d+)\D*(?<min>\d+)\D*(?<sec>\d+(\.\d*))");
Regex d = new Regex(@"(?<dir>[NSEW])");
var numbers = r.Match(value);
string degStr = numbers.Groups["deg"].ToString();
string minStr = numbers.Groups["min"].ToString();
string secStr = numbers.Groups["sec"].ToString();
Debug.Assert(degStr == "32");
var deg = int.Parse(degStr);
var min = int.Parse(minStr);
var sec = double.Parse(secStr);
var direction = d.Match(value).Groups["dir"].ToString();
var result = deg + (min / 60.0) + (sec / 3600.0);
if (direction == "S" || direction == "W") result = -result;
return result;
}
私の入力文字列は"32 19 17.25 N"
上記のコードは、ASP.NET MVC 3 Web アプリケーション (ビュー エンジンとして Razor を使用) 上の .NET 4 Web ホスティング サービス (aspspider) で実行されます。
degStr == "32"
のアサーションが有効であることに注意してください。また、上記のコードをコンソール アプリケーションで実行すると、問題なく動作します。私は答えを求めてウェブを精査しましたが、何もありません...
何か案は?
更新 (スタック トレース)
[FormatException: Input string was not in a correct format.]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9586043
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
System.Int32.Parse(String s) +23
ParkIt.GeoModelBinder.BindGeo(String value) in C:\MyProjects\ParkIt\ParkIt\GeoBinder.cs:42
42行目はvar deg = int.Parse(degStr);
、例外が含まれていることに注意してくださいSystem.Int32.Parse
(System.Double
提案されたとおりではありません)。