Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串[]到整数的转换错误_C#_Asp.net_Asp.net Mvc 4_Type Conversion - Fatal编程技术网

C# 字符串[]到整数的转换错误

C# 字符串[]到整数的转换错误,c#,asp.net,asp.net-mvc-4,type-conversion,C#,Asp.net,Asp.net Mvc 4,Type Conversion,从我的月份数据库中,我提取了一个字符串,其中包含由“,”分隔的所有预订日期时间格式: e、 g{01/01/13 00:00:00、02/01/13 00:00:00等} 然后,我用它的“/”参数分割一天,这样,在DayNumber[0]中,我得到了DayNumber的值: e、 g 现在我无法理解的部分是: 使用Convert.ToInt32抛出、System.FormatException从DayNumber[0]分配DaySpecific的int值:输入字符串的格式不正确 DayNumbe

从我的月份数据库中,我提取了一个字符串,其中包含由“,”分隔的所有预订日期时间格式: e、 g{01/01/13 00:00:00、02/01/13 00:00:00等}

然后,我用它的“/”参数分割一天,这样,在DayNumber[0]中,我得到了DayNumber的值: e、 g

现在我无法理解的部分是: 使用Convert.ToInt32抛出、System.FormatException从DayNumber[0]分配DaySpecific的int值:输入字符串的格式不正确

DayNumber[0]的值为“01”,但是转换方法不接受起始值为0的数字

我尝试了DayNumber[0]。ToString 0,但它总是给出一个错误,即过度驾驶不正确

有人知道我怎么解决这个问题吗

如果有一个非常简单的答案,我深表歉意

编辑: 感谢您的回复,但到目前为止还没有解决方案。在我的示例中,{01/01/13}中的{}纯粹用于表示数据集

我包括了一个try-catch,这是一个例外:

mscorlib.dll中发生类型为“System.FormatException”的第一次意外异常 System.FormatException:输入字符串的格式不正确。 在System.Number.StringToNumberString str,NumberStyles选项,NumberBuffer&Number,NumberFormatInfo信息,布尔解析十进制 在System.Number.ParseInt32String s、NumberStyles样式、NumberFormatInfo信息中 在System.Int16.Parses、NumberStyles样式、NumberFormatInfo信息中 在System.Int16.parses处 在c:\Users\simon\Documents\Visual Studio 2012\Projects\railway\railway\Controllers\MonthController.cs中的railway.Controllers.MonthController.Index中:第47行 “iisexpress.exe”管理的v4.0.30319:已加载“C:\Users\simon\AppData\Local\Temp\Temp\Temporary ASP.NET Files\root\37a427fe\5dbf5c62\App\u Web\u lt1aaagr.dll”,已加载符号。
程序“[2276]iisexpress.exe:Managed v4.0.30319”已退出,代码为0 0x0。

在您提供的测试数据中,您的算法将使用{01 as day。这将引发格式异常。在转换字符串之前,请确保字符串是您认为的字符串。

若要获取列表中第一个日期的日期部分,请执行以下操作:

{01/01/13} becomes Daynumber[0] = '01'; 
DayNumber[1] = '01' DayNumber[2] = '13' 
否则:

 int DaySpecific = month.BookedDays.First().Day
如果您的列表是datetime类型,而不是以字符串形式传递日期,那就更好了。

这段代码很好用

String bookedDays = month.BookedDays.ToString();
String[] dates = bookedDays.Split(',');

int DaySpecific = DateTime.Parse(dates.First()).Day;

我认为将该值转换为DateTime值可能更有用,如下所示。如果需要,您总是可以只提取日部分

string bookedDays = "01/01/13 00:00:00, 02/01/13 00:00:00";
string[] days = bookedDays.Split(',');
string[] DayNumber = days[0].Split('/');
int DaySpecific = Convert.ToInt16(DayNumber[0]);

请尝试Int16.ParseDayNumber[0],它应该可以很好地处理前导零。更好的选择是将DateTime作为C DateTime对象获取,并从中获取Day属性。Convert.ToInt1601工作正常。您不需要DateTime[]?如果是这样,您可以使用DateTime.TryParseExact。此解决方案就是我选择的解决方案,但我相信其他解决方案也会起到同样的作用。事实证明,int16和Int32转换错误是由于db上的预定天数数据集中用分号代替逗号造成的。感谢您的帮助:感谢您在这方面的帮助。
string bookedDays = "01/01/13 00:00:00, 02/01/13 00:00:00";
string[] days = bookedDays.Split(',');
string[] DayNumber = days[0].Split('/');
int DaySpecific = Convert.ToInt16(DayNumber[0]);
var sample = "{01/01/13 00:00:00, 02/01/13 00:00:00}";
var values = Regex.Matches(sample, @"\d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}")
    .OfType<Match>()
    .Select(value =>
    {
        DateTime aux;
        if (DateTime.TryParseExact(value.Value, "dd/MM/yy HH:mm:ss",
                null, DateTimeStyles.AllowWhiteSpaces, out aux))
            return aux as DateTime?;

        return null;
    })
    .Where (date => date != null)
    .ToList();

foreach (var date in values)
    Console.WriteLine(date.Value.Day);