<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Блог Сергея Даровских: последние заметки с кейвордом "c#"</title><link>http://sau.ru/keywords/c</link><description></description><language>ru</language><generator>e2 (http://e2.ilyabirman.ru)</generator><item><title>Преобразование типов</title><guid isPermaLink="true">http://sau.ru/2009/11/24/1</guid><link>http://sau.ru/2009/11/24/1</link><comments>http://sau.ru/2009/11/24/1/comments</comments><description>В&amp;nbsp;Silverlight часто приходится работать с&amp;nbsp;объектами, не&amp;nbsp;зная заранее их&amp;nbsp;типа. Чтобы получить доступ ко&amp;nbsp;всем методам соответствующего объекта, надо его преобразовать к&amp;nbsp;правильному типу. Первая мысль&amp;nbsp;&amp;mdash; использовать для этого прямой каст: &lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Canvas&amp;nbsp;cnvMap&amp;nbsp;=&amp;nbsp;(Canvas)&amp;nbsp;LayoutRoot.FindName("myCanvas");&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;
Однако если такого объекта не&amp;nbsp;существует или он&amp;nbsp;имеет другой тип, такой каст выбросит исключение InvalidCastException. Таким образом, правильный код со&amp;nbsp;временем превращается в&amp;nbsp;суровое нагромождение блоков try-catch.&lt;br /&gt;
&lt;br /&gt;
По-моему, для преобразования типов гораздо удобнее использовать оператор &lt;b&gt;as&lt;/b&gt;. В&amp;nbsp;отличие от&amp;nbsp;прямого преобразования, в&amp;nbsp;случае неудачи он не&amp;nbsp;вызывает исключение, а&amp;nbsp;возвращает null. То&amp;nbsp;есть код выглядит таким образом:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Canvas&amp;nbsp;cnvMap&amp;nbsp;=&amp;nbsp;LayoutRoot.FindName("myCanvas")&amp;nbsp;as&amp;nbsp;Canvas;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cnvMap&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;выполняем&amp;nbsp;нужные&amp;nbsp;действия&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;обрабатываем&amp;nbsp;ошибку&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;
Если преобразования типов применяются часто, то&amp;nbsp;второй вариант делает код намного более читаемым.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sau.ru/keywords/silverlight"&gt;silverlight&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sau.ru/keywords/c"&gt;c#&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sau.ru/keywords/kod"&gt;код&lt;/a&gt;</description><pubDate>Tue, 24 Nov 2009 21:33:00 +0500</pubDate></item></channel></rss>