Co robię, to szukam wartości dla określonego pola w tablicy hashtable. Obiekt może być garstką prymitywnych typów, których wartość ma być umieszczona wewnątrz XML, ale wychodzi z tablicy jako obiektu. Tak więc mam problem z koniecznością podjęcia decyzji o typie, rzucić go, a następnie użyć tego typu ToString. Byłoby miło, gdybym nie musiał go rzucać, ale wtedy wywoła to ToString na typie obiektu, a nie na metodę odpowiednika w rzeczywistym typie.Czysty sposób rzutowania na rzeczywisty typ obiektu
Poniższy kod jest funkcjonalnie poprawny, ale nie jestem z nim zadowolony. Być może podążanie tą ścieżką pocieszenia doprowadzi mnie do bycia purystą. Tak czy inaczej bardzo doceniam lepszy sposób napisania tego, jeśli taki istnieje.
public string GetColumnValue(string columnName)
{
object value = item[columnName];
if (value == null)
return string.Empty;
if (value.GetType() == typeof(string))
{
return (string)value;
}
else if (value.GetType() == typeof(double))
{
return ((double)value).ToString();
}
...
}
Działa to dla podstawowych typów, ale może nie działać dobrze dla typów niestandardowych - zależy od tego, co można zwrócić w pozycji [columnName] ... –
Reed, czy możesz podać przykład? – spender
Szczerze mówiąc, nie sądziłem, że to zadziała. Tak więc dla argumentów, w jaki sposób można jawnie wywołać implementację ToString dla określonego typu drzewa dziedziczenia? –