Convert.ToInt16 (строка ["INT"] как Int16?); возвращает 0 и (Int16) row ["INT"]; выбрасывает исключение. Указанный приказ недействителен.Указанное приведение недействительно при литье из int32 в int16
private DataTable GetTableWithValue()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("INT", typeof(Int32)),
new DataColumn("STRING", typeof(string)),
new DataColumn("DATETIME", typeof(DateTime)),
new DataColumn("BOOLEAN", typeof(bool)),
});
dt.Rows.Add(dt.NewRow());
dt.Rows[0][0] = 10;
dt.Rows[0][1] = "Babu";
dt.Rows[0][2] = DateTime.Now;
dt.Rows[0][3] = true;
return dt;
}
dt = GetTableWithValue();
row = dt.Rows[0];
int? INT = (row["INT"] as int?); //10
Int16? INT16 = Convert.ToInt16(row["INT"] as Int16?); //0
Int16 = (Int16)row["INT"]; //Specified cast is not valid.
если значение строки ["INT"] равно null, то (Int16) строка ["INT"] код не обрабатывается. Convert.ToInt16() принимает аргумент как объект и не будет вызывать нулевое вычисление – Prathyush
Неправильная ли последняя строка? Int16 = (Int16) строка ["INT"]; // Указанный приведение недействительно. Я думаю, что это должно быть INT16 = (Int16) row ["INT"]; // Указанный приведение недействительно. – burzhuy
если вы сделали 'Convert.ToInt16 (строка [" INT "] как int?)' Или даже просто 'Convert.ToInt16 (строка [" INT "]), ваша вторая строка сработала бы. это «как Int16» нарушает его. –