2011-09-22 10 views
6

Czy istnieje mimo to sprawdzić, czy argument string.format jest poprawny argument coś jak ciąg.TryFormat.Czy istnieje ciąg metod.TryFormat, który działa podobnie do łańcucha.Format?

try 
{ 
    string.Format(Format, new string[Selectors.Count]); // 
} 
catch (Exception) 
{ 
    return false; 
} 

Używam tej metody w moim UI i jego powolne i wyczuwalny, gdy wyjątek jest przechwycony, więc zastanawiałem się, czy istnieje lepsza metoda.

Zawsze mogłem napisać własną metodę, ale chciałem wiedzieć, czy jest ona zdefiniowana.

nieprawidłowy format sznurek wyglądałby tym string.Format ("format {0} {1} {2}" nowy łańcuch [] { "a", "b"})

+0

Co znalazłeś w [dokumentach MSDN] (http://msdn.microsoft.com/en-us/library/system.string_methods.aspx)? (Zakładam, że mówisz tutaj o środowisku wykonawczym .Net, chociaż tak naprawdę nie powiedziałeś ...) –

+0

tak, powinienem wspomnieć, że ia m mówi o środowisku wykonawczym .Net. Ale nie znalazłem tego, czego potrzebuję w dokumentach MSDN. –

+0

Co to jest, co próbujesz zrobić? Wygląda na to, że używasz ciężkiego rozwiązania, gdy jest prawdopodobnie lepszy sposób na zrobienie tego. – Enigmativity

Odpowiedz

7

Jedynym Sposób, w jaki mogłaby działać metoda System.String.TryFormat, polegałby na wychwytywaniu wyjątków, które mogą być wyrzucane z różnych implementacji IFormattable.ToString (chociaż String.TryFormat może zastąpić niektóre z własnych wyjątków zwracaniem flagi z błędem, czyniąc to, nie dopuszczając wyjątków od TryFormat bądź bardzo pomocny).

Jeszcze gorzej, metoda TryFormat nie wiedziałaby, czy którekolwiek z wyjątków wyrzuconych przez IFormattable.ToString mogą być rzeczami, które nie powinny zostać przechwycone. Nawet jeśli umowa IFormattable.ToString wymagała, aby implementacje nie wyciekły niczego poza FormatException, jeśli specyfikator formatu był nieprawidłowy, prawdopodobnie potrzebowalibyśmy metody zwracającej fałsz (zamiast rzucania), gdyby niektóre z obiektów wejściowych były nieprawidłowe, ale próbowały je sformatować nic nie pogorszyło, podczas gdy wyciekł wyjątek, gdyby sam proces formatowania przedmiotów spowodował korupcję. Niestety, sposób konfigurowania hierarchii wyjątków nie jest możliwy, aby String.TryFormat mogło zacząć się zbliżać do takiej semantyki.

Po prostu nie ma wiele możliwości, aby metoda String.TryFormat mogła zrobić coś innego niż użycie bloku try/catch w celu tłumienia wyjątków zgłaszanych przez metody wewnętrzne. Istnieje normalna implikacja, że ​​metody powinny działać lepiej w przypadku niepowodzenia, niż byłoby to rutyną konsumencką, która właśnie wykonała XX w bloku try-catch. Jeśli metoda TryFormat po prostu zadziała, dławiąc wyjątki, może równie dobrze pozwolić konsumentowi na takie rozwiązanie.

+0

Dziękuję za intensywny Wyjaśnienie –

Powiązane problemy