code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| DataTable table = new DataTable();
table.Columns.Add("datetime", Type.GetType("System.DateTime"));
table.Columns.Add("item", Type.GetType("System.String"));
DateTime date = new DateTime(2000, 1, 1);
// Create new DataRow objects and add to DataTable.
for (int i = 0; i < 10; i++)
{
DataRow row = table.NewRow();
row["datetime"] = date.AddDays(i);
row["item"] = "item " + i.ToString();
table.Rows.Add(row);
}
DateTime date2 = table.Rows[3][0]; |
http://msdn.microsoft.com/en-us/library/kwfe1t7z(VS.85).aspx geeft aan dat de Item property altijd een object terug geeft. Daarom zal bovenstaand voorbeeld niet compilen aangezien er een cast mist op de laatste regel. Omdat het een strongly typed datatable is (regel 3 / 4), had ik verwacht dat de return type van het column type (DateTime in dit geval) zou zijn en geen object (waardoor bovenstaande gewoon zou werken).
Als ik regel 11 verander in row["datetime"] = i; compilet het programma ook niet met de volgende error. Volgens mij maakt dit duidelijk dat intern wel de waarde als DateTime wordt opgeslagen. Of is dit enkel een check voordat de waarde als object wordt opgeslagen?
Invalid cast from 'Int32' to 'DateTime'.Couldn't store <0> in datetime Column. Expected type is DateTime.opgeslagen?
Is er een manier om geen object terug te krijgen, maar het echte type van de column? Of zal ik telkens moeten casten?