Najszybszy sposób sprawdzenia, czy łańcuch może zostać przeanalizowany

Analizuję pliki CSV na listy obiektów o silnie wpisanych właściwościach. Wymaga to przeanalizowania każdej wartości ciągu z pliku doIConvertible rodzaj (int, decimal, double, DateTime, itp.) za pomocąTypeDescriptor.

Używamtry catch radzić sobie z sytuacjami, gdy przetwarzanie nie powiedzie się. Dokładne informacje o tym, gdzie i dlaczego ten wyjątek występuje, są następnie rejestrowane w celu dalszego zbadania. Poniżej znajduje się kod parsujący:

try
{
    parsedValue = TypeDescriptor.GetConverter(type).ConvertFromString(dataValue);
}
catch (Exception ex)
{
    // Log failure
}

Problem:

Po pomyślnym przeanalizowaniu wartości proces jest szybki. Podczas analizowania danych z dużą ilością niepoprawnych danych proces może trwać tysiące razy wolniej (z powodu przechwycenia wyjątku).

Testowałem to z parsowaniem doDateTime. Oto wyniki:

Pomyślne parsowanie: średnio32 kleszcze na analizęNiepowodzenie analizy: średnia z146296 kleszczy na analizę

To ponad 4500 razy wolniej.

Pytanie:

Czy mogę sprawdzić, czy wartość ciągu może zostać pomyślnie przeanalizowana bez konieczności używania mojego drogiegotry catch metoda? A może jest inny sposób, w jaki powinienem to zrobić?

EDYCJA: Muszę użyćTypeDescriptor (i nieDateTime.TryParse), ponieważ typ jest określany w czasie wykonywania.

questionAnswers(5)

yourAnswerToTheQuestion