<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: is, as, != null</title>
	<atom:link href="http://blog.cincura.net/230255-is-as-null/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cincura.net/230255-is-as-null/</link>
	<description>Taking something that can&#039;t be done, and then doing it.</description>
	<lastBuildDate>Tue, 07 Sep 2010 14:25:21 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: T</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1556</link>
		<dc:creator>T</dc:creator>
		<pubDate>Fri, 22 May 2009 07:35:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1556</guid>
		<description>Neviem, preco sa neobublikoval moj vcerajsi prispevok...ale v skratke:Vzhladom na pouzitie as aj bez chybajucej delaracie y ide o upcast scenar. 1. prva verzia bude rychlejsia bez ohladu na zapnutu optimalizaciu , v druhej sa vola isinst dvakrat, v prvej raz...(vid dolu)2. Unika mi zmysel kodu - je zmyslom error vetvry generovanie viac popisnej exception, ako clovek ziska ked cely kod nahradi jednodo pouzitim cast operatora?... Foo x= (Foo) y; dokaz:object bar = new Foo();			//upcast						Foo bar2 = bar as Foo;			if(bar2 == null)				throw new InvalidCastException(&quot;Foo&quot;);			bar2.Test();						if (!(bar is Foo))				throw new InvalidCastException(&quot;Foo&quot;);			Foo bar3= bar as Foo;			bar3.Test();			if(bar is Foo)				(bar as Foo).Test();			else				throw new InvalidCastException(&quot;Foo&quot;);.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       82 (0x52)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3,           [3] bool CS$4$0000)  IL_0000:  nop  IL_0001:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0006:  stloc.0  IL_0007:  ldloc.0  IL_0008:  isinst     ConsoleApplication2.Program/Foo  IL_000d:  stloc.1  IL_000e:  ldloc.1  IL_000f:  ldnull  IL_0010:  ceq  IL_0012:  ldc.i4.0  IL_0013:  ceq  IL_0015:  stloc.3  IL_0016:  ldloc.3  IL_0017:  brtrue.s   IL_0024  IL_0019:  ldstr      &quot;Foo&quot;  IL_001e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0023:  throw  IL_0024:  ldloc.1  IL_0025:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_002a:  nop  IL_002b:  ldloc.0  IL_002c:  isinst     ConsoleApplication2.Program/Foo  IL_0031:  ldnull  IL_0032:  cgt.un  IL_0034:  stloc.3  IL_0035:  ldloc.3  IL_0036:  brtrue.s   IL_0043  IL_0038:  ldstr      &quot;Foo&quot;  IL_003d:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0042:  throw  IL_0043:  ldloc.0  IL_0044:  isinst     ConsoleApplication2.Program/Foo  IL_0049:  stloc.2  IL_004a:  ldloc.2  IL_004b:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0050:  nop  IL_0051:  ret} // end of method Program::Main.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       66 (0x42)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3)  IL_0000:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0005:  stloc.0  IL_0006:  ldloc.0  IL_0007:  isinst     ConsoleApplication2.Program/Foo  IL_000c:  stloc.1  IL_000d:  ldloc.1  IL_000e:  brtrue.s   IL_001b  IL_0010:  ldstr      &quot;Foo&quot;  IL_0015:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_001a:  throw  IL_001b:  ldloc.1  IL_001c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0021:  ldloc.0  IL_0022:  isinst     ConsoleApplication2.Program/Foo  IL_0027:  brtrue.s   IL_0034  IL_0029:  ldstr      &quot;Foo&quot;  IL_002e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0033:  throw  IL_0034:  ldloc.0  IL_0035:  isinst     ConsoleApplication2.Program/Foo  IL_003a:  stloc.2  IL_003b:  ldloc.2  IL_003c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0041:  ret} // end of method Program::Main</description>
		<content:encoded><![CDATA[<p>Neviem, preco sa neobublikoval moj vcerajsi prispevok&#8230;ale v skratke:Vzhladom na pouzitie as aj bez chybajucej delaracie y ide o upcast scenar. 1. prva verzia bude rychlejsia bez ohladu na zapnutu optimalizaciu , v druhej sa vola isinst dvakrat, v prvej raz&#8230;(vid dolu)2. Unika mi zmysel kodu &#8211; je zmyslom error vetvry generovanie viac popisnej exception, ako clovek ziska ked cely kod nahradi jednodo pouzitim cast operatora?&#8230; Foo x= (Foo) y; dokaz:object bar = new Foo();			//upcast						Foo bar2 = bar as Foo;			if(bar2 == null)				throw new InvalidCastException(&#8220;Foo&#8221;);			bar2.Test();						if (!(bar is Foo))				throw new InvalidCastException(&#8220;Foo&#8221;);			Foo bar3= bar as Foo;			bar3.Test();			if(bar is Foo)				(bar as Foo).Test();			else				throw new InvalidCastException(&#8220;Foo&#8221;);.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       82 (0&#215;52)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3,           [3] bool CS$4$0000)  IL_0000:  nop  IL_0001:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0006:  stloc.0  IL_0007:  ldloc.0  IL_0008:  isinst     ConsoleApplication2.Program/Foo  IL_000d:  stloc.1  IL_000e:  ldloc.1  IL_000f:  ldnull  IL_0010:  ceq  IL_0012:  ldc.i4.0  IL_0013:  ceq  IL_0015:  stloc.3  IL_0016:  ldloc.3  IL_0017:  brtrue.s   IL_0024  IL_0019:  ldstr      &#8220;Foo&#8221;  IL_001e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0023:  throw  IL_0024:  ldloc.1  IL_0025:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_002a:  nop  IL_002b:  ldloc.0  IL_002c:  isinst     ConsoleApplication2.Program/Foo  IL_0031:  ldnull  IL_0032:  cgt.un  IL_0034:  stloc.3  IL_0035:  ldloc.3  IL_0036:  brtrue.s   IL_0043  IL_0038:  ldstr      &#8220;Foo&#8221;  IL_003d:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0042:  throw  IL_0043:  ldloc.0  IL_0044:  isinst     ConsoleApplication2.Program/Foo  IL_0049:  stloc.2  IL_004a:  ldloc.2  IL_004b:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0050:  nop  IL_0051:  ret} // end of method Program::Main.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       66 (0&#215;42)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3)  IL_0000:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0005:  stloc.0  IL_0006:  ldloc.0  IL_0007:  isinst     ConsoleApplication2.Program/Foo  IL_000c:  stloc.1  IL_000d:  ldloc.1  IL_000e:  brtrue.s   IL_001b  IL_0010:  ldstr      &#8220;Foo&#8221;  IL_0015:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_001a:  throw  IL_001b:  ldloc.1  IL_001c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0021:  ldloc.0  IL_0022:  isinst     ConsoleApplication2.Program/Foo  IL_0027:  brtrue.s   IL_0034  IL_0029:  ldstr      &#8220;Foo&#8221;  IL_002e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0033:  throw  IL_0034:  ldloc.0  IL_0035:  isinst     ConsoleApplication2.Program/Foo  IL_003a:  stloc.2  IL_003b:  ldloc.2  IL_003c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0041:  ret} // end of method Program::Main</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: T</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1555</link>
		<dc:creator>T</dc:creator>
		<pubDate>Thu, 21 May 2009 10:36:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1555</guid>
		<description>@jirka,tomas:Jednoznacne prva verzia bude rychlejsia, pretoze sa len raz zavola isinst(tyke check), v druhom pripade dvakrat bez ohladu na zapnutu optimializaciu, ak ma niekto dokaz, ze to je inak, tak prosim sem s tym aj so zdrojakom...static void Main(string[] args){	object bar = new Foo();	//upcast				Foo bar2 = bar as Foo;	if(bar2 == null)		throw new InvalidCastException(&quot;Foo&quot;);	bar2.Test();				if (!(bar is Foo))		throw new InvalidCastException(&quot;Foo&quot;);	Foo bar3= bar as Foo;	bar3.Test();}neoptimalizavany byte kode:.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       82 (0x52)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3,           [3] bool CS$4$0000)  IL_0000:  nop  IL_0001:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0006:  stloc.0  IL_0007:  ldloc.0  IL_0008:  isinst     ConsoleApplication2.Program/Foo  IL_000d:  stloc.1  IL_000e:  ldloc.1  IL_000f:  ldnull  IL_0010:  ceq  IL_0012:  ldc.i4.0  IL_0013:  ceq  IL_0015:  stloc.3  IL_0016:  ldloc.3  IL_0017:  brtrue.s   IL_0024  IL_0019:  ldstr      &quot;Foo&quot;  IL_001e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0023:  throw  IL_0024:  ldloc.1  IL_0025:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_002a:  nop  IL_002b:  ldloc.0  IL_002c:  isinst     ConsoleApplication2.Program/Foo  IL_0031:  ldnull  IL_0032:  cgt.un  IL_0034:  stloc.3  IL_0035:  ldloc.3  IL_0036:  brtrue.s   IL_0043  IL_0038:  ldstr      &quot;Foo&quot;  IL_003d:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0042:  throw  IL_0043:  ldloc.0  IL_0044:  isinst     ConsoleApplication2.Program/Foo  IL_0049:  stloc.2  IL_004a:  ldloc.2  IL_004b:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0050:  nop  IL_0051:  ret} // end of method Program::Mainoptimalizacia:.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       66 (0x42)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3)  IL_0000:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0005:  stloc.0  IL_0006:  ldloc.0  IL_0007:  isinst     ConsoleApplication2.Program/Foo  IL_000c:  stloc.1  IL_000d:  ldloc.1  IL_000e:  brtrue.s   IL_001b  IL_0010:  ldstr      &quot;Foo&quot;  IL_0015:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_001a:  throw  IL_001b:  ldloc.1  IL_001c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0021:  ldloc.0  IL_0022:  isinst     ConsoleApplication2.Program/Foo  IL_0027:  brtrue.s   IL_0034  IL_0029:  ldstr      &quot;Foo&quot;  IL_002e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0033:  throw  IL_0034:  ldloc.0  IL_0035:  isinst     ConsoleApplication2.Program/Foo  IL_003a:  stloc.2  IL_003b:  ldloc.2  IL_003c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0041:  ret} // end of method Program::Mainbtw.+@Jakub ŠturcCo je zmyslom else { //error } sekvencie? thrownutie expection? Chceme a mame dovod pridat vyssiu uroven popisnosti ako ziskame pri  Foo x = (Foo) y; ktore zabezpeci trownutie InvalidCastException?Ak ano, ma zmysel kod hore v bloku. Ak nie, tak Foo x = (Foo) y; je to najrozumnejsie na co sa cela diskusia svrkne.</description>
		<content:encoded><![CDATA[<p>@jirka,tomas:Jednoznacne prva verzia bude rychlejsia, pretoze sa len raz zavola isinst(tyke check), v druhom pripade dvakrat bez ohladu na zapnutu optimializaciu, ak ma niekto dokaz, ze to je inak, tak prosim sem s tym aj so zdrojakom&#8230;static void Main(string[] args){	object bar = new Foo();	//upcast				Foo bar2 = bar as Foo;	if(bar2 == null)		throw new InvalidCastException(&#8220;Foo&#8221;);	bar2.Test();				if (!(bar is Foo))		throw new InvalidCastException(&#8220;Foo&#8221;);	Foo bar3= bar as Foo;	bar3.Test();}neoptimalizavany byte kode:.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       82 (0&#215;52)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3,           [3] bool CS$4$0000)  IL_0000:  nop  IL_0001:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0006:  stloc.0  IL_0007:  ldloc.0  IL_0008:  isinst     ConsoleApplication2.Program/Foo  IL_000d:  stloc.1  IL_000e:  ldloc.1  IL_000f:  ldnull  IL_0010:  ceq  IL_0012:  ldc.i4.0  IL_0013:  ceq  IL_0015:  stloc.3  IL_0016:  ldloc.3  IL_0017:  brtrue.s   IL_0024  IL_0019:  ldstr      &#8220;Foo&#8221;  IL_001e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0023:  throw  IL_0024:  ldloc.1  IL_0025:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_002a:  nop  IL_002b:  ldloc.0  IL_002c:  isinst     ConsoleApplication2.Program/Foo  IL_0031:  ldnull  IL_0032:  cgt.un  IL_0034:  stloc.3  IL_0035:  ldloc.3  IL_0036:  brtrue.s   IL_0043  IL_0038:  ldstr      &#8220;Foo&#8221;  IL_003d:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0042:  throw  IL_0043:  ldloc.0  IL_0044:  isinst     ConsoleApplication2.Program/Foo  IL_0049:  stloc.2  IL_004a:  ldloc.2  IL_004b:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0050:  nop  IL_0051:  ret} // end of method Program::Mainoptimalizacia:.method private hidebysig static void  Main(string[] args) cil managed{  .entrypoint  // Code size       66 (0&#215;42)  .maxstack  2  .locals init ([0] object bar,           [1] class ConsoleApplication2.Program/Foo bar2,           [2] class ConsoleApplication2.Program/Foo bar3)  IL_0000:  newobj     instance void ConsoleApplication2.Program/Foo::.ctor()  IL_0005:  stloc.0  IL_0006:  ldloc.0  IL_0007:  isinst     ConsoleApplication2.Program/Foo  IL_000c:  stloc.1  IL_000d:  ldloc.1  IL_000e:  brtrue.s   IL_001b  IL_0010:  ldstr      &#8220;Foo&#8221;  IL_0015:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_001a:  throw  IL_001b:  ldloc.1  IL_001c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0021:  ldloc.0  IL_0022:  isinst     ConsoleApplication2.Program/Foo  IL_0027:  brtrue.s   IL_0034  IL_0029:  ldstr      &#8220;Foo&#8221;  IL_002e:  newobj     instance void [mscorlib]System.InvalidCastException::.ctor(string)  IL_0033:  throw  IL_0034:  ldloc.0  IL_0035:  isinst     ConsoleApplication2.Program/Foo  IL_003a:  stloc.2  IL_003b:  ldloc.2  IL_003c:  callvirt   instance void ConsoleApplication2.Program/Foo::Test()  IL_0041:  ret} // end of method Program::Mainbtw.+@Jakub ŠturcCo je zmyslom else { //error } sekvencie? thrownutie expection? Chceme a mame dovod pridat vyssiu uroven popisnosti ako ziskame pri  Foo x = (Foo) y; ktore zabezpeci trownutie InvalidCastException?Ak ano, ma zmysel kod hore v bloku. Ak nie, tak Foo x = (Foo) y; je to najrozumnejsie na co sa cela diskusia svrkne.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakub Šturc</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1554</link>
		<dc:creator>Jakub Šturc</dc:creator>
		<pubDate>Thu, 21 May 2009 07:59:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1554</guid>
		<description>Ja by som to napisal takto:1 Foo x = (y as Foo);2 if (x == null)3 {4   // &lt;error&gt;;5 }6 x...Preco hlavny scenar behu programu schovavat niekam do else vetvy?</description>
		<content:encoded><![CDATA[<p>Ja by som to napisal takto:1 Foo x = (y as Foo);2 if (x == null)3 {4   // <error>;5 }6 x&#8230;Preco hlavny scenar behu programu schovavat niekam do else vetvy?</error></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cincura.net</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1553</link>
		<dc:creator>cincura.net</dc:creator>
		<pubDate>Thu, 21 May 2009 07:08:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1553</guid>
		<description>2pbouda: Jasny. Nepsal jsem, ze je to uplne stejne. Ja vzdy davam prednost nejprve citelnosti, takze proto volim is.</description>
		<content:encoded><![CDATA[<p>2pbouda: Jasny. Nepsal jsem, ze je to uplne stejne. Ja vzdy davam prednost nejprve citelnosti, takze proto volim is.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cincura.net</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1552</link>
		<dc:creator>cincura.net</dc:creator>
		<pubDate>Thu, 21 May 2009 07:06:31 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1552</guid>
		<description>Prejne tak Tomasi. Nakonec jsem se tomu podival na zoubek, teda na IL. A oba pristupy generuji stejne sekvence prikazu. Jedine u toho druheho se uz nemusi potom treba prirazovat do promenne.Vypadne z toho: IL_0000:  ldarg.0 IL_0001:  isinst     ConsoleApplication1.Foo IL_0006:  brfalse.s  IL_000a IL_0008:  ldc.i4.1 IL_0009:  ret IL_000a:  ldc.i4.0 IL_000b:  ret Takze uz opravdu zbyva jen prakticke hledisko.</description>
		<content:encoded><![CDATA[<p>Prejne tak Tomasi. Nakonec jsem se tomu podival na zoubek, teda na IL. A oba pristupy generuji stejne sekvence prikazu. Jedine u toho druheho se uz nemusi potom treba prirazovat do promenne.Vypadne z toho: IL_0000:  ldarg.0 IL_0001:  isinst     ConsoleApplication1.Foo IL_0006:  brfalse.s  IL_000a IL_0008:  ldc.i4.1 IL_0009:  ret IL_000a:  ldc.i4.0 IL_000b:  ret Takze uz opravdu zbyva jen prakticke hledisko.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pbouda</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1551</link>
		<dc:creator>pbouda</dc:creator>
		<pubDate>Thu, 21 May 2009 06:56:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1551</guid>
		<description>Osobně se mi více líbí druhý způsob, protože je čitelnější, ale stejně používám spíše ten první, protože když to budu stejně přetypovávat, tak proč to neudělat rovnou.Zcela zaměnitelné ty dva způsoby ale nejsou, protože &quot;is&quot; lze aplikovat jak na refernce type, tak na value type, zatímco &quot;as&quot; pouze na value type, takže pokud proměnná může být struct, pak je potřeba druhý způsob s modifikací (Foo)y místo y as Foo.</description>
		<content:encoded><![CDATA[<p>Osobně se mi více líbí druhý způsob, protože je čitelnější, ale stejně používám spíše ten první, protože když to budu stejně přetypovávat, tak proč to neudělat rovnou.Zcela zaměnitelné ty dva způsoby ale nejsou, protože &#8220;is&#8221; lze aplikovat jak na refernce type, tak na value type, zatímco &#8220;as&#8221; pouze na value type, takže pokud proměnná může být struct, pak je potřeba druhý způsob s modifikací (Foo)y místo y as Foo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomas Petricek</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1550</link>
		<dc:creator>Tomas Petricek</dc:creator>
		<pubDate>Wed, 20 May 2009 23:56:22 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1550</guid>
		<description>Teoreticky vzato bude asi spravnejsi pouzit &quot;as&quot; pouze jednou (protoze pretypovani v .NETu nejaky rychly run-time check vzdycky vyzaduje). V praxi bych tipoval ze to nebude nijak vyznamny rozdil, pokud vubec (JIT by to mohl snadno optimalizovat kdyby chtel... a dost mozna to kvuli nejake vymyslenosti v Dynamic Language Runtime optimalizovat musi).Ale nerekl bych ze &quot;is&quot; bude provadet pretypovani a zachytavat vyjimku, protoze vyjimky jsou dost pomala zalezitost. Spis bych tipoval ze &quot;a is A&quot; znamena &quot;(a as A) != null&quot; a ze to pouziva opcode &quot;isinst&quot;. Mimochodem, technicky vzato by mohlo jit napsat neco jako toto:Case(value,  (T1 x) =&gt; { .. pripad kdy value je T1 .. },  (T2 x) =&gt; { .. pripad kdy value je T2 .. });</description>
		<content:encoded><![CDATA[<p>Teoreticky vzato bude asi spravnejsi pouzit &#8220;as&#8221; pouze jednou (protoze pretypovani v .NETu nejaky rychly run-time check vzdycky vyzaduje). V praxi bych tipoval ze to nebude nijak vyznamny rozdil, pokud vubec (JIT by to mohl snadno optimalizovat kdyby chtel&#8230; a dost mozna to kvuli nejake vymyslenosti v Dynamic Language Runtime optimalizovat musi).Ale nerekl bych ze &#8220;is&#8221; bude provadet pretypovani a zachytavat vyjimku, protoze vyjimky jsou dost pomala zalezitost. Spis bych tipoval ze &#8220;a is A&#8221; znamena &#8220;(a as A) != null&#8221; a ze to pouziva opcode &#8220;isinst&#8221;. Mimochodem, technicky vzato by mohlo jit napsat neco jako toto:Case(value,  (T1 x) => { .. pripad kdy value je T1 .. },  (T2 x) => { .. pripad kdy value je T2 .. });</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jachymko</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1549</link>
		<dc:creator>jachymko</dc:creator>
		<pubDate>Wed, 20 May 2009 21:46:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1549</guid>
		<description>ja pouzivamvar x = a as T;if (x != null){}proc pretypovavat dvakrat...?</description>
		<content:encoded><![CDATA[<p>ja pouzivamvar x = a as T;if (x != null){}proc pretypovavat dvakrat&#8230;?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DeaLer</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1548</link>
		<dc:creator>DeaLer</dc:creator>
		<pubDate>Wed, 20 May 2009 21:08:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1548</guid>
		<description>No tohle už je vážný. Raději tyhle dva smaž ... díky :)</description>
		<content:encoded><![CDATA[<p>No tohle už je vážný. Raději tyhle dva smaž &#8230; díky <img src='http://blog.cincura.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DeaLer</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1547</link>
		<dc:creator>DeaLer</dc:creator>
		<pubDate>Wed, 20 May 2009 21:07:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1547</guid>
		<description>Co to píšu za blbosti :) Výsledek je false.</description>
		<content:encoded><![CDATA[<p>Co to píšu za blbosti <img src='http://blog.cincura.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Výsledek je false.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DeaLer</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1546</link>
		<dc:creator>DeaLer</dc:creator>
		<pubDate>Wed, 20 May 2009 21:02:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1546</guid>
		<description>JJ. Pokud si dobře vzpomínám, při použití &quot;is&quot; dochází také k přetypování a pokud nedojde k InvalidCastException, je výsledek true. Ale stejně mě to neodrazuje od používání této varianty.</description>
		<content:encoded><![CDATA[<p>JJ. Pokud si dobře vzpomínám, při použití &#8220;is&#8221; dochází také k přetypování a pokud nedojde k InvalidCastException, je výsledek true. Ale stejně mě to neodrazuje od používání této varianty.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mstr</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1545</link>
		<dc:creator>mstr</dc:creator>
		<pubDate>Wed, 20 May 2009 20:54:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1545</guid>
		<description>teoreticky je vas druhy zpusob pomalejsi, provadi se tam dve kontroly na typ, zatimco v prvnim jen jedna a druha kontrola je na null a tedy teoreticky rychlejsi.Rozebrano je to na strance 101 a 102 knizky CLR via C#.</description>
		<content:encoded><![CDATA[<p>teoreticky je vas druhy zpusob pomalejsi, provadi se tam dve kontroly na typ, zatimco v prvnim jen jedna a druha kontrola je na null a tedy teoreticky rychlejsi.Rozebrano je to na strance 101 a 102 knizky CLR via C#.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cincura.net</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1544</link>
		<dc:creator>cincura.net</dc:creator>
		<pubDate>Wed, 20 May 2009 20:29:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1544</guid>
		<description>Jo mas pravdu, psal jsem to z fleku. Tam by slo primo ((Foo)y)...U toho druheho je pretypovani taky jen jednou. Nicmene *asi* != null bude levnejsi nez is. Nedelal nekdo bechmark?</description>
		<content:encoded><![CDATA[<p>Jo mas pravdu, psal jsem to z fleku. Tam by slo primo ((Foo)y)&#8230;U toho druheho je pretypovani taky jen jednou. Nicmene *asi* != null bude levnejsi nez is. Nedelal nekdo bechmark?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: DeaLer</title>
		<link>http://blog.cincura.net/230255-is-as-null/#comment-1543</link>
		<dc:creator>DeaLer</dc:creator>
		<pubDate>Wed, 20 May 2009 20:20:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.cincura.net/230255-is-as-null/#comment-1543</guid>
		<description>První varianta je asi korektnější, protože zde probíhá přetypování pouze jednou, ale osobně používám tu druhou. Jen malá drobnost -&gt; u druhé varianty je zbytečné používát přetypování s pomocí klíčového slova &quot;as&quot;, protože zde y nemůže být null. Pokud by tomu tak bylo, nevyhověla by podmínka.</description>
		<content:encoded><![CDATA[<p>První varianta je asi korektnější, protože zde probíhá přetypování pouze jednou, ale osobně používám tu druhou. Jen malá drobnost -> u druhé varianty je zbytečné používát přetypování s pomocí klíčového slova &#8220;as&#8221;, protože zde y nemůže být null. Pokud by tomu tak bylo, nevyhověla by podmínka.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
