<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET</title><link>http://blogs.wankuma.com/mrt/category/1498.aspx</link><description>.NET</description><managingEditor>Mr.T</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Mr.T</dc:creator><title>[VB.NET]隠れたCOSTという話</title><link>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx</link><pubDate>Wed, 07 Oct 2009 11:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/181942.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/181942.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/181942.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;元ネタは、&lt;a title="http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx" href="http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx&lt;/a&gt;&lt;br&gt;# ほとんど、ネタに乗っかるだけの話なんで恐縮なんですけどね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;VB6.0以前でも云われてきた話じゃないかと思ってたんですが、ループなどで、こういう処理を書いたとします。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; MyList.Count&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; s.Append(MyList(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;このとき、MyList.Countは、ループのたびに評価される、というのが隠れたCostということみたいです。&lt;/p&gt; &lt;p&gt;で、ほんじゃどんだけ違うのだろうと、MSILコードを見るとこんな感じでした。&lt;/p&gt; &lt;p&gt;#Costがあるってなら、何か余計な処理&amp;amp;時間がかかる処理があるんだろうと思うので。  &lt;p&gt;&amp;nbsp; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 (0x30)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0007:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_000c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Count()&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; IL_0011:&amp;nbsp; stloc.2（※１）&lt;/font&gt;&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002b&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0016:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_001c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance !0 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Item(int32)&lt;br&gt;&amp;nbsp; IL_0021:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp; IL_0026:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0027:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MyList.Coutを事前に求めておいたパターンで同じようにやってみました。&lt;/p&gt; &lt;div class="SourceBox"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; count &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = MyList.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; count&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; s.Append(MyList(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50 (0x32)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] int32 count,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Count()&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; IL_0010:&amp;nbsp; stloc.0（※２）&lt;/font&gt;&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; stloc.3&lt;br&gt;&amp;nbsp; IL_0014:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002d&lt;br&gt;&amp;nbsp; IL_0017:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0018:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_001d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_001e:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance !0 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Item(int32)&lt;br&gt;&amp;nbsp; IL_0023:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002e:&amp;nbsp; ldloc.3&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017&lt;br&gt;&amp;nbsp; IL_0031:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp; &lt;p&gt;よくわからんのだけど、この※１と※２は、Countの戻り値を評価スタックとやらにPushしてるわけで、この値を比較対象と&lt;br&gt;してるんだと思ってるんですが、違うんですかね？  &lt;p&gt;この時点では、もうどちらもint32の値として利用されているから、Costなんてなさそうな感じがします。  &lt;p&gt;前段では、  &lt;p&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015  &lt;p&gt;後段では、  &lt;p&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017  &lt;p&gt;&amp;nbsp; &lt;p&gt;ここで、ループというか指定行に飛んでいくようになってます。つまり、これを見る限りは、Appendは毎回評価されている  &lt;p&gt;けど、Countは毎回なんぞ評価されていないように見えます。  &lt;p&gt;&amp;nbsp; &lt;p&gt;じゃあ、For Each使えばどうなのよ、ってことで、  &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; data &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; MyList&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; s.Append(data)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&amp;nbsp; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 61 (0x3d)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 2&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] string data,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt; VB$t_struct$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; .try&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;!0&amp;gt; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::GetEnumerator()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0010:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0011:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0023&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0013:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015:&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance !0 valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;::get_Current()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001c:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001d:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0022:&amp;nbsp; pop&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0023:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0025:&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance bool valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;::MoveNext()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002a:&amp;nbsp; brtrue.s&amp;nbsp;&amp;nbsp; IL_0013&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002c:&amp;nbsp; leave.s&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_003c&lt;br&gt;&amp;nbsp; }&amp;nbsp; // end .try&lt;br&gt;&amp;nbsp; finally&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002e:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0030:&amp;nbsp; constrained. valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0036:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.IDisposable::Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_003b:&amp;nbsp; endfinally&lt;br&gt;&amp;nbsp; }&amp;nbsp; // end handler&lt;br&gt;&amp;nbsp; IL_003c:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;まあ、このヘンになってくると比較にもならん結果になるので、パスw&lt;br&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;で、引用元の人は、こういうのは最悪だろって話をしてるんだけど、  &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyLameObjectHeader &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;New&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; MyLameObjectHeader.Count&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; s.Append(MyLameObjectHeader.Item(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; data &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; NextMLO &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; Insert(&lt;font color="blue"&gt;ByVal&lt;/font&gt; mlo &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject)&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; &lt;font color="blue"&gt;If&lt;/font&gt; NextMLO IsNot &lt;font color="blue"&gt;Nothing&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&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; NextMLO = mlo&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; &lt;font color="blue"&gt;Else&lt;/font&gt;&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; mlo.NextMLO = NextMLO.NextMLO&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; NextMLO.NextMLO = mlo&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; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Count() &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;&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; &lt;font color="blue"&gt;Dim&lt;/font&gt; ct &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&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; &lt;font color="blue"&gt;Dim&lt;/font&gt; current &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;Me&lt;/font&gt;&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; &lt;font color="blue"&gt;Do&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt; current IsNot &lt;font color="blue"&gt;Nothing&lt;/font&gt;&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; ct += &lt;font color="#c00040"&gt;1&lt;/font&gt;&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; current = current.NextMLO&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; &lt;font color="blue"&gt;Loop&lt;/font&gt;&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; &lt;font color="blue"&gt;Return&lt;/font&gt; ct&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Item(&lt;font color="blue"&gt;ByVal&lt;/font&gt; index &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;) &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject&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; &lt;font color="blue"&gt;If&lt;/font&gt; index &amp;gt;= Count() &lt;font color="blue"&gt;OrElse&lt;/font&gt; index &amp;lt; &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&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; &lt;font color="blue"&gt;Dim&lt;/font&gt; current &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;Me&lt;/font&gt;&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; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; index&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; current = current.NextMLO&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; &lt;font color="blue"&gt;Next&lt;/font&gt;&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; &lt;font color="blue"&gt;Return&lt;/font&gt; current&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MyLameObject.Countが毎回、ループで処理されるからひどいことになるよってことですな。せめてこうしろって話ですな。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt;(Mainの変更後）  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyLameObjectHeader &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;New&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; c &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = MyLameObjectHeader.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; c&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; s.Append(MyLameObjectHeader.Item(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;--Main部分 変更前&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 (0x30)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0007:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_000c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 Sample.Module1/MyLameObject::Count()&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002b&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0016:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_001c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class Sample.Module1/MyLameObject Sample.Module1/MyLameObject::Item(int32)&lt;br&gt;&amp;nbsp; IL_0021:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(object)&lt;br&gt;&amp;nbsp; IL_0026:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0027:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;--Main部分 変更後&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50 (0x32)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] int32 c,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 Sample.Module1/MyLameObject::Count()&lt;br&gt;&amp;nbsp; IL_0010:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; stloc.3&lt;br&gt;&amp;nbsp; IL_0014:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002d&lt;br&gt;&amp;nbsp; IL_0017:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0018:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_001d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_001e:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class Sample.Module1/MyLameObject Sample.Module1/MyLameObject::Item(int32)&lt;br&gt;&amp;nbsp; IL_0023:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(object)&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002e:&amp;nbsp; ldloc.3&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017&lt;br&gt;&amp;nbsp; IL_0031:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;クラス部分は変更してないから、同じだし。&lt;/p&gt; &lt;p&gt;それ以外だと、やっぱりContの部分なんですが・・・これって、やっぱりループごとに評価されているわけじゃないように&lt;br&gt;見えるんですが・・・&lt;/p&gt; &lt;p&gt;サルでもわかる説明とかないですかねw&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/181942.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>SqlDataReaderのGetSchemeTableで、余計な列(フィールド)まで取ってくるときがある。</title><link>http://blogs.wankuma.com/mrt/archive/2009/02/11/167951.aspx</link><pubDate>Wed, 11 Feb 2009 11:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2009/02/11/167951.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/167951.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2009/02/11/167951.aspx#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/167951.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/167951.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;#.NetFrameWork2.0　, SQLServer 2005での環境です。  &lt;p&gt;ちなみに、これではないみたいです。&lt;br&gt;[BUG] SqlDataReader の GetSchemaTable() が誤った列名を返す　&lt;a href="http://support.microsoft.com/kb/307512/ja"&gt;http://support.microsoft.com/kb/307512/ja&lt;/a&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;SQLServerからデータを取得して、それをDataTableにセットしたい...でも、フィールドの情報はいちいち指定したくない&lt;/p&gt; &lt;p&gt;という場合に、SqlDataReader.GetSchemaTableによって、テーブルのフィールド情報を取得し、そのフィールド名と&lt;/p&gt; &lt;p&gt;型情報をとってきて、自動的にDataTableへ落とし込む、なんてことをしてたりしますか？&lt;/p&gt; &lt;p&gt;今じゃ古いやり方なのかもしれませんけど、まあベタな方法ですよね。&lt;/p&gt; &lt;p&gt;#それとも、もう、やらないのかなぁ。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;この流れでいうと、まずはDataTaleを用意して、そこにカラムを追加し、データを突っ込むことになりますが、&lt;/p&gt; &lt;p&gt;カラムを用意する時点で、どうもエラーになる。それは、例えば、こんなソース。&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; targetSchemeDataReader &lt;font color="blue"&gt;As&lt;/font&gt; SqlDataReader = &lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; targetScheme &lt;font color="blue"&gt;As&lt;/font&gt; DataTable&lt;br&gt;targetSchemeDataReader = targetSQLCommand.ExecuteReader(CommandBehavior.KeyInfo)&lt;br&gt;targetScheme = targetSchemeDataReader.GetSchemaTable&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; fieldNameIndex &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"ColumnName"&lt;/font&gt;).Ordinal&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; typeIndex &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"DataType"&lt;/font&gt;).Ordinal&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; isHiddenIndex &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"IsHidden"&lt;/font&gt;).Ordinal&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; iRow &lt;font color="blue"&gt;As&lt;/font&gt; System.Data.DataRow &lt;font color="blue"&gt;In&lt;/font&gt; targetScheme.Rows&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetDataTable.Columns.Add(iRow.Item(fieldNameIndex).ToString, _　&lt;font color="#ff0000"&gt;←ここでエラー&lt;/font&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type.&lt;font color="blue"&gt;GetType&lt;/font&gt;(&lt;font color="blue"&gt;CType&lt;/font&gt;(iRow.Item(typeIndex), Type).FullName))&lt;br&gt;&lt;font color="blue"&gt;Next&lt;/font&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;br&gt;デバッグしてみると、ストアドプロシジャから返された結果に対して、&lt;strong&gt;意図していないフィールド&lt;/strong&gt;まで&lt;/p&gt; &lt;p&gt;返されていることがわかり、そのフィールドのカラム名がだぶっている様子。&lt;/p&gt; &lt;p&gt;#ダブったのは今回のケースではそうなっただけ&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Ｓｅｌｅｃｔで返す予定になっていたのは、４つのフィールドであるのに、スキーマ情報として取得されたときには、8つのフィールド名&lt;/p&gt; &lt;p&gt;ということで、なぜそんなものまで返されるのか正直わけがわからなかった。&lt;/p&gt; &lt;p&gt;で、調べたところ似たような現象のお方がいた。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic53804.aspx"&gt;http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic53804.aspx&lt;/a&gt;  &lt;p&gt;&lt;br&gt;なんじゃ、英語でわからんのだけども、ロバートという人こんなこといってます。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;When you specify the CommandBehavior.KeyInfo option, Sql Server will &lt;br&gt;automatically return you the columns in your original select along with the &lt;br&gt;necessary additional columns needed to uniquely identify the rows returned.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;SQLComman.ExeteReader(CommandBehavior.KeyInfo)を使うと、SQLServerは、&lt;/p&gt; &lt;p&gt;行を一意に識別するため、自動的にキー項目を追加する、みたいな感じですね。&lt;/p&gt; &lt;p&gt;これ、どこがソース（情報源）になっているのかわかりませんが、そう考えると納得できます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;さらに、上記の返答のRessには、&lt;/p&gt; &lt;p&gt;IsHiddenという項目があること&lt;/p&gt; &lt;p&gt;取得元がViewであるなら、WITH VIEW_METADATAをつけるとええよ&lt;/p&gt; &lt;p&gt;とか云ってます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;とりあえず、そういうことであれば列情報に違いがあるんじゃないかと思い、比較してみたところ、&lt;/p&gt; &lt;p&gt;メタデータにIsHiddenという項目があることがわかりました。&lt;/p&gt; &lt;p&gt;これを比較すると、こちらがSelect ・・・と指定したフィールドに対しては、True,書いてないフィールドはFalseが&lt;/p&gt; &lt;p&gt;返ってきています。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そういうわけで、ソースをこんな風に変更。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; targetSchemeDataReader &lt;font color="blue"&gt;As&lt;/font&gt; SqlDataReader = &lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; targetScheme &lt;font color="blue"&gt;As&lt;/font&gt; DataTable&lt;br&gt;targetSchemeDataReader = targetSQLCommand.ExecuteReader(CommandBehavior.KeyInfo)&lt;br&gt;targetScheme = targetSchemeDataReader.GetSchemaTable&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; fieldNameIndex &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"ColumnName"&lt;/font&gt;).Ordinal&lt;br&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt; typeIndex &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"DataType"&lt;/font&gt;).Ordinal&lt;br&gt;&lt;font color="#0000ff"&gt;Dim&lt;/font&gt; isHiddenIndex &lt;font color="#0000ff"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;Integer&lt;/font&gt; = targetScheme.Columns(&lt;font color="#c00040"&gt;"IsHidden"&lt;/font&gt;).Ordinal &lt;font color="#ff0000"&gt;←追加&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; iRow &lt;font color="blue"&gt;As&lt;/font&gt; System.Data.DataRow &lt;font color="blue"&gt;In&lt;/font&gt; targetScheme.Rows&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;CBool&lt;/font&gt;(iRow.Item(isHiddenIndex)) = &lt;font color="blue"&gt;False&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then　&lt;/font&gt;&lt;font color="#ff0000"&gt;←追加&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetDataTable.Columns.Add(iRow.Item(fieldNameIndex).ToString, _&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type.&lt;font color="blue"&gt;GetType&lt;/font&gt;(&lt;font color="blue"&gt;CType&lt;/font&gt;(iRow.Item(typeIndex), Type).FullName))&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If　&lt;/font&gt;&lt;font color="#ff0000"&gt;←追加&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Next&lt;/font&gt; &lt;p&gt; めでたく、必要な情報のみ取得できました。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;って、KeyInfo使えっていってるのは、MSDNサンプルにもあるのに、どういうことなんじゃ！&lt;/p&gt; &lt;p&gt;DataReader の GetSchemaTable メソッドと Visual Basic .NET を使用して列スキーマを取得する方法&lt;/p&gt; &lt;p&gt;&lt;a title="http://support.microsoft.com/kb/310108/ja" href="http://support.microsoft.com/kb/310108/ja"&gt;http://support.microsoft.com/kb/310108/ja&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/167951.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>HttpServerUtility.Executeではクエリパラメータが渡せる</title><link>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx</link><pubDate>Wed, 07 Jan 2009 15:59:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/165826.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/165826.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/165826.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;レガシーのASPで、IIS5.0を使っていると、Server.Executeでページ遷移をすることがよくありましたが、&lt;/p&gt; &lt;p&gt;実はURLにクエリ文字列が含められなくて、非常に困っていました。&lt;/p&gt; &lt;p&gt;たとえば、&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Server.Execute("hogehoge.asp?UserCD='**'")&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;みたいなものですね。これは、エラーになります。&lt;/p&gt; &lt;p&gt;⇒IIS の Server.Execute パラメータにクエリ文字列を使用するとエラーが発生する ：&lt;a title="http://support.microsoft.com/kb/247420/ja" href="http://support.microsoft.com/kb/247420/ja"&gt;http://support.microsoft.com/kb/247420/ja&lt;/a&gt;&lt;/p&gt; &lt;p&gt;これは、仕様なのでどうしようもなかったのですね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ところが、ASP.NETになってから、Server.ExecuteメソッドはHttpServerutilityクラスになってくれて、少なくともASP2.0では&lt;/p&gt; &lt;p&gt;Server.Execute("hogehoge.aspx?UserCD='**'")&lt;/p&gt; &lt;p&gt;がきちんと通るし、hogehoge.aspxでも、UserCDを取得することができました。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;まあ、ASP.NETは別物なんだから、できるようになったといえばそれでオシマイなんですがねw&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/165826.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>WindowsFormのユーザコントロールでは、内部でSize変更するとLocation値が変更されてしまう。</title><link>http://blogs.wankuma.com/mrt/archive/2008/08/01/151418.aspx</link><pubDate>Fri, 01 Aug 2008 15:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/08/01/151418.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/151418.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/08/01/151418.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/151418.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/151418.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;WindowsFormって、こんなに面倒だったっけ？とか思いつつ、メモ。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;当たり前といえば、当たり前なのかもしれないが、ユーザコントロールに適当なLabelをおいて、ユーザコントロールの大きさを&lt;/p&gt; &lt;p&gt;マウスでぐりぐり動かしてみると、わかる。&lt;/p&gt; &lt;p&gt;ラベル位置（0,0)の位置は、ユーザコントロール側からすると相対的な位置でしかない。&lt;/p&gt; &lt;p&gt;サイズを変更すると、貼り付けたラベルの位置は変わってしまう。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Anchor = none &lt;p&gt;Dock = none &lt;p&gt;AutoSize = false &lt;p&gt;の状態です。 &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;たとえば、こんなの。水色の部分がユーザフォーム。&lt;/p&gt; &lt;p&gt;&lt;img src="http://f.hatena.ne.jp/images/fotolife/M/Mr_T_0023/20080801/20080801152955.jpg?1217572312"&gt; &lt;/p&gt; &lt;p&gt;この端っこをマウスでぐりっと大きくする。&lt;/p&gt; &lt;p&gt;Labelの位置は動いてしまう。つまり、サイズ変更が、Lableの位置まで変更してしまう。&lt;/p&gt; &lt;p&gt;&lt;img src="http://f.hatena.ne.jp/images/fotolife/M/Mr_T_0023/20080801/20080801152956.jpg?1217572249"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;こんなことで時間をとってしまうなんて。&lt;/p&gt; &lt;p&gt;なんだか、違和感があるのは、私だけ？ というか、WindowsFormを扱いが初心者並なのがバレバレですな。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/151418.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>VB.NETでXMLファイルの整合性とる（チェックする）</title><link>http://blogs.wankuma.com/mrt/archive/2008/07/08/147953.aspx</link><pubDate>Tue, 08 Jul 2008 16:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/07/08/147953.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/147953.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/07/08/147953.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/147953.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/147953.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そもそもやりたいことは、単純にいえば、XMLのチェックだ。動的に作成されたXMLが、きちんと生成規則にあっているかどうかを見たいのだが、&lt;/p&gt; &lt;p&gt;具体的にはxsdファイルで定義されいてる内容で目的のXMLデータをValidすることになる。&lt;/p&gt; &lt;p&gt;その際には、XMLSchemeSetクラスが必要。&lt;/p&gt; &lt;p&gt;で、Validするためのサンプルクラスは以下。&lt;/p&gt; &lt;div class="SourceBox"&gt;&lt;font color="blue"&gt;Imports&lt;/font&gt; System.Xml.Schema&lt;br&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; XMLChecker&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt; _targetXML &lt;font color="blue"&gt;As&lt;/font&gt; XElement&lt;br&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Property&lt;/font&gt; TargetXML() &lt;font color="blue"&gt;As&lt;/font&gt; XElement&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Get&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; _targetXML&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Get&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Set&lt;/font&gt;(&lt;font color="blue"&gt;ByVal&lt;/font&gt; value &lt;font color="blue"&gt;As&lt;/font&gt; XElement)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _targetXML = value&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Set&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Property&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt; _validValue &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Boolean&lt;/font&gt; = &lt;font color="blue"&gt;True&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; ReadValid(&lt;font color="blue"&gt;ByVal&lt;/font&gt; sender &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;, &lt;font color="blue"&gt;ByVal&lt;/font&gt; e &lt;font color="blue"&gt;As&lt;/font&gt; Xml.Schema.ValidationEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _validValue = &lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="green"&gt;'MessageBox.Show(e.Message)&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; XMLValid(&lt;font color="blue"&gt;ByVal&lt;/font&gt; sender &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;, &lt;font color="blue"&gt;ByVal&lt;/font&gt; e &lt;font color="blue"&gt;As&lt;/font&gt; ValidationEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _validValue = &lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="green"&gt;'MessageBox.Show(e.Message)&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Valid(&lt;font color="blue"&gt;ByVal&lt;/font&gt; resourceName &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;) &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Boolean&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; myAssembly = System.Reflection.&lt;font color="blue"&gt;Assembly&lt;/font&gt;.GetExecutingAssembly&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; targetStream = myAssembly.GetManifestResourceStream(resourceName)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; targetStream &lt;font color="blue"&gt;Is&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; targetSheme = XmlSchema.Read(targetStream, &lt;font color="blue"&gt;AddressOf&lt;/font&gt; ReadValid)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; _validValue = &lt;font color="blue"&gt;False&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; targetShemeSet = &lt;font color="blue"&gt;New&lt;/font&gt; XmlSchemaSet&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetShemeSet.Add(targetSheme)&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; targetDocument = &lt;font color="blue"&gt;New&lt;/font&gt; XDocument&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetDocument.Add(_targetXML)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetDocument.Validate(targetShemeSet, &lt;font color="blue"&gt;AddressOf&lt;/font&gt; XMLValid)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; _validValue = &lt;font color="blue"&gt;False&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; _validValue&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; &lt;br&gt;&lt;/div&gt; &lt;p&gt; ここまで至るには、結構な穴があったのだが、まずは列挙。&lt;/p&gt; &lt;p&gt;・実際のValid処理では、XDocumentインスタンスに対して、拡張メソッドのValidを使う。&lt;br&gt;　しかし、そのValidをインテリセンス上に出すには、きちんとImports System.XML.Shemaを書かないと、Validが表示されない。&lt;/p&gt; &lt;p&gt;　※Validは、拡張メソッドってことで、&lt;a href="http://msdn.microsoft.com/ja-jp/library/bb310028.aspx"&gt;Extensions クラス&lt;/a&gt;のメンバになります。拡張メソッド、はじめて使ったよ。&lt;/p&gt; &lt;p&gt;・Validメソッドは、XDocumentに対して拡張されます。XElementとかには拡張されません。なので、Linqとかで使われるXElementをXDocumentに&lt;br&gt;変換しましょう。&lt;/p&gt; &lt;p&gt;・Validして、「おかしいよー」という場合のみ、Addressofで指定されたプロシジャに飛びます。Validした結果は、どこにも保存されないので、&lt;br&gt;自前でプロパティなどに保存すべし。&lt;/p&gt; &lt;p&gt;・XMLファイルからxsdファイルを生成できることを、&lt;a href="http://blogs.wankuma.com/torikobito/"&gt;とりこびと&lt;/a&gt;さんに&lt;a href="http://www.wankuma.com/seminar/20080628osaka20/Default.aspx"&gt;わんくま大阪勉強会#20&lt;/a&gt;で教えてもらったはいいが、そこからStreamにするには&lt;br&gt;どうすりゃいいのかわかっていない。&lt;br&gt;　で、調べたら、アセンブリリソースにしてから、GetManifestResourceStreamを使えという内容を＠ITで発見。⇒&lt;a href="http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43530&amp;amp;forum=7&amp;amp;2"&gt;ココ&lt;/a&gt;&lt;/p&gt; &lt;p&gt;※返答していたのが&lt;a href="http://techbank.jp/community/blogs/kametaro/default.aspx"&gt;TecｈBankのかめたろさん&lt;/a&gt;、であることに後で気がついたw&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; で、やってみたらが、GetManifestResourceStreamの引数に、プロジェクト名.***.xsdとしてみたが、StreamはNothingのままで、また悩む。&lt;br&gt;&amp;nbsp; &lt;a href="http://www.atmarkit.co.jp/fdotnet/dotnettips/220resources3/resources3.html"&gt;ここ&lt;/a&gt;も参考にしてみたりしたが、やはりだめ。なぜだろうと、思ったら、VBでいう&lt;strong&gt;「デフォルトの名前空間」をわざと空にしていた！&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;　これがデフォルトの名前空間の弊害か！？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;　&lt;/strong&gt;指定文字列を”***.xsd”とそのまま書いてみたら、あっさりOK。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;こんなところで、XSDファイルの内容から、チェックできるようになったわけでした。　ファイルパスを指定するらもちょっと簡単にできる。&lt;br&gt;⇒XmlSchemaSetに、そのままファイルパスでAddできる。&lt;/p&gt; &lt;p&gt;自動生成されたXSDファイルは、きちんと見直す必要がありますから、そこも注意。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/147953.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>Equalsをオーバーライドする（VB.NET）</title><link>http://blogs.wankuma.com/mrt/archive/2008/06/05/141703.aspx</link><pubDate>Thu, 05 Jun 2008 14:27:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/06/05/141703.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/141703.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/06/05/141703.aspx#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/141703.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/141703.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HogeクラスのEaualsをオーバーライドする必要があったので、Memoです。&lt;/p&gt;
&lt;p&gt;既定のEaualsは、クラスが参照型である場合は、参照先の比較になるので、クラス内部の フィールドとかは比較してくれません。 
&lt;p&gt;なので、自前で実装する必要があります。 
&lt;p&gt;まずは、前提条件をば。 &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;複雑なクラスそのものを比較するなら、そのクラスのEqualsをオーバライドする必要があります。 
&lt;li&gt;更に、Equalsをオーバライドしたら、GetHashCodeメソッドもオーバーライドしないといけません。 
&lt;li&gt;EaualsがTrueとなる場合、GetHashCodeで返される値は同じものでなくてはなりません。&lt;br&gt;ただし、必要条件であって、十分条件ではない。 
&lt;li&gt;Nothingとの比較は必ずFalseを返さなくてはならない 
&lt;li&gt;例外をスローすることはない（ってスローしないように作れってことですね）&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;以下を前提にして、更にわからんところを埋める。&lt;/p&gt;
&lt;p&gt;参照ではなく値で比較しなくてはならない場合は、&lt;/p&gt;
&lt;p&gt;
&lt;div class="SourceBox"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; testclassA&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; valA &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt; = &lt;font color="#c00040"&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; listB &lt;font color="blue"&gt;As&lt;/font&gt; List(Of testclassB) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of testclassB)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;br&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; testclassB&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; val1 &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt; = &lt;font color="#c00040"&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;こんな感じのクラスで、valAとListBを比較しなくてはならないこと。当然testClassBの比較は、既定のEqualsを使うのではなく、val1を&lt;/p&gt;
&lt;p&gt;比較するように&lt;strong&gt;オーバーライドしなくてはならない。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;更に、だ。&lt;/p&gt;
&lt;p&gt;Equalsの引数に取るのは、Objectであることに注意。&lt;/p&gt;
&lt;p&gt;Objectであるため、なんでも引数に取れる。とれるが、それが比較したいクラスではなく、まったく別のクラスであっても&lt;/p&gt;
&lt;p&gt;コンパイルは通る。そして例外が発生したりする。使う側で同一のクラスであるかどうか、というのをあらかじめ知って&lt;/p&gt;
&lt;p&gt;いる場合でないと使えない。（当然だが）&lt;/p&gt;
&lt;p&gt;しかい、それでは困るので、タイプセーフ（？）となるように、Typeの比較を先におこなってしまうのがいいだろう。 &lt;/p&gt;
&lt;div class="SourceBox"&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; testclassA&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; valA &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt; = &lt;font color="#c00040"&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; listB &lt;font color="blue"&gt;As&lt;/font&gt; List(Of testclassB) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of testclassB)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;br&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; Test()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; target = new testclassA&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; flg = target.Equlas(&lt;font color="#c00040"&gt;100&lt;/font&gt;) ⇒こんなのがかけてしまう！&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;結果、Objectが引数のケースと、自分自身のクラスを引数とする場合を二つ考えておく必要があるってことで、こんな風にする。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="SourceBox"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Overloads&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Equals(&lt;font color="blue"&gt;ByVal&lt;/font&gt; obj &lt;font color="blue"&gt;As&lt;/font&gt; SubGroupData) &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Boolean&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; obj &lt;font color="blue"&gt;Is&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;.ReferenceEquals(&lt;font color="blue"&gt;Me&lt;/font&gt;, obj) = &lt;font color="blue"&gt;True&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;True&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Me&lt;/font&gt;.GetHashCode &amp;lt;&amp;gt; obj.GetHashCode &lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False　（※１）&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="green"&gt;'個別実装&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; (&lt;font color="blue"&gt;Me&lt;/font&gt;.SubGroupName &amp;lt;&amp;gt; obj.SubGroupName) &lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; (&lt;font color="blue"&gt;Me&lt;/font&gt;.SubGroupNo &amp;lt;&amp;gt; obj.SubGroupNo) &lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Me&lt;/font&gt;.Count &amp;lt;&amp;gt; obj.Count &lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Me&lt;/font&gt;.Count - &lt;font color="#c00040"&gt;1&lt;/font&gt;&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; &lt;font color="blue"&gt;If&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Me&lt;/font&gt;.Item(i).Equals(obj.Item(i)) = &lt;font color="blue"&gt;False&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;True&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Equals(&lt;font color="blue"&gt;ByVal&lt;/font&gt; obj &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;) &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Boolean&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; obj.&lt;font color="blue"&gt;GetType&lt;/font&gt;.Equals(&lt;font color="blue"&gt;Me&lt;/font&gt;.&lt;font color="blue"&gt;GetType&lt;/font&gt;) = &lt;font color="blue"&gt;False&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&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; &lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Else&lt;/font&gt;&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; &lt;font color="blue"&gt;Return&lt;/font&gt; Equals(&lt;font color="blue"&gt;CType&lt;/font&gt;(obj, SubGroupData))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; GetHashCode() &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; subGroupNameHash &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="blue"&gt;Me&lt;/font&gt;.SubGroupName.GetHashCode&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; subGroupNoHash &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="blue"&gt;Me&lt;/font&gt;.SubGroupNo.GetHashCode&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; listHash &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; sItem &lt;font color="blue"&gt;As&lt;/font&gt; InspectionItemData &lt;font color="blue"&gt;In&lt;/font&gt; _inspectionItemList&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; listHash = listHash &lt;font color="blue"&gt;Xor&lt;/font&gt; sItem.GetHashCode&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; listHash &lt;font color="blue"&gt;Xor&lt;/font&gt; subGroupNameHash &lt;font color="blue"&gt;Xor&lt;/font&gt; subGroupNoHash&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;少々困ったのは、GetHashCodeの実装方法だ。&lt;/p&gt;
&lt;p&gt;これについては、MSDNに書いてある、書いてあるという情報しか見つけられず、結局中に載っていたサンプルを参考に&lt;/p&gt;
&lt;p&gt;各比較値の&lt;strong&gt;HashCodeをXor&lt;/strong&gt;することで、生成することにした。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;めんどくせーーーー。 &lt;/p&gt;
&lt;p&gt;参考URL：&lt;/p&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/ja-jp/library/336aedhh(vs.80).aspx" href="http://msdn.microsoft.com/ja-jp/library/336aedhh(vs.80).aspx"&gt;http://msdn.microsoft.com/ja-jp/library/336aedhh(vs.80).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.ailight.jp/blog/kazuk/articles/6293.aspx" href="http://www.ailight.jp/blog/kazuk/articles/6293.aspx"&gt;http://www.ailight.jp/blog/kazuk/articles/6293.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;※補足&lt;/p&gt;
&lt;p&gt;今回の場合、Equals内部でGetHashCodeを利用しているが、それがループでHashCodeを作成している。&lt;br&gt;これが速度的なネックにはなりそうである。&lt;br&gt;そもそも、GetHashCodeの比較部分（※１）は、実際十分条件は満たすが、必要条件ではない。&lt;br&gt;つまり、このチェックをしなくても、その後のチェックできちんと判断はされる。&lt;/p&gt;
&lt;p&gt;とすれば、後はこのGetHashCodeそのものにかかる時間と、すっとばしたときの時間との兼ね合いになるが&lt;br&gt;個別実装部分のチェックでもループを回すので、どちらに時間がかかるか、というのはすぐに理解できるだろう。&lt;br&gt;&lt;br&gt;ということで、（※１）は「今回は」しなくていいわけですね。&lt;br&gt;もし、GetHashCodeがもっとすばやく取得できるなら実装しても問題はないのだろう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/141703.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>Panelコントロールの中に動的にコントロールを追加していくと、Locationで指定した位置がずれる</title><link>http://blogs.wankuma.com/mrt/archive/2008/05/27/139640.aspx</link><pubDate>Tue, 27 May 2008 16:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/05/27/139640.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/139640.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/05/27/139640.aspx#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/139640.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/139640.aspx</trackback:ping><description>&lt;p&gt; Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;#.NETFramework2.0以降の場合です。&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Windows.FormでPanelコントロールを利用する機会は非常に多いと思うのですが、その際、動的にコントロールを&lt;/p&gt; &lt;p&gt;追加するには、&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;targetPanel.controls.add(addingControl) &lt;/p&gt;&lt;/div&gt; &lt;p&gt;と書けばよいわけです。&lt;/p&gt; &lt;p&gt;その際に&lt;/p&gt; &lt;ol&gt; &lt;li&gt;targetPanel.AutoScroll=Trueであり  &lt;li&gt;addingControl.Locationの値を設定したとする&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;すると、Panelを親として&lt;strong&gt;相対位置&lt;/strong&gt;で、コントロールが配置されます。&lt;/p&gt; &lt;p&gt;この相対位置というのは注意が必要で、&lt;/p&gt; &lt;ol&gt; &lt;li&gt;ボタンクリックなどで動的にコントロールが追加され、スクロールバーが表示されて&amp;nbsp; &lt;li&gt;追加後にスクロールバーで位置を動かす&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;これにより、それまで表示されていた内部コントロールは、&lt;strong&gt;スクロールされた分&lt;/strong&gt;だけLocationの位置が変化してしまいます。&lt;/p&gt; &lt;p&gt;これを絶対位置とするためには、そのスクロール分を考慮して、LocationにPointを与えてやらなくてはなりません。&lt;/p&gt; &lt;p&gt;つまり、&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Dim nextPoint as Piont = new Point(x,y)&lt;/p&gt; &lt;p&gt;addinControl.Location = nextPoint&lt;/p&gt;&lt;/div&gt; &lt;p&gt;ではなく、&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Dim nextPoint as Piont = new Point(x,y)  &lt;p&gt;&lt;del&gt;nextPoint.offset(x-targetPanel.HorizontalScroll.Value,y-targetPanel.VerticalScroll.Value)&lt;/del&gt;
&lt;div&gt;nextPoint.offset(-targetPanel.HorizontalScroll.Value,-targetPanel.VerticalScroll.Value)&lt;/div&gt;  &lt;p&gt;addinControl.Location = nextPoint &lt;/p&gt;&lt;/div&gt; &lt;p&gt;としなくてはなりません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;#まったくのメモ&lt;/p&gt;
&lt;p&gt;#2008-05-28 ソースに間違いがあったのを修正&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/139640.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>VisualBasic 2008の新機能 IFが変わった</title><link>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</link><pubDate>Thu, 13 Mar 2008 09:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/127492.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx#Feedback</comments><slash:comments>89</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/127492.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/127492.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、これはすごい&lt;/p&gt; &lt;p&gt;やってくれたよ、こんなのをサポートしたのね。&lt;/p&gt; &lt;p&gt;ネタ元：&lt;a title="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx" href="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;（注意：以下は翻訳ではないですよ）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;今までC#、C++などで使えていた3項演算子である（？）は、ショートサーキット評価による演算で、&lt;br&gt;かなり便利だなぁと思われていたものです。&lt;/p&gt; &lt;p&gt;それが、VBでも利用できるようになりました。すばらしい。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ショートサーキット評価ってのは、簡単にいえば、&lt;/p&gt; &lt;p&gt;True Or (変数A = 変数B)&lt;/p&gt; &lt;p&gt;という式があった場合、変数A=変数Bを評価しなくても、式の結果はTrueになりますから、&lt;/p&gt; &lt;p&gt;わざわざ 変数A=変数Bを内部で評価しませんよ、というものです。&lt;/p&gt; &lt;p&gt;逆にいえば、ショートサーキットであれば、Trueパートだろうが、Flaseパートだろうが、「内部で評価されてしまう」&lt;/p&gt; &lt;p&gt;わけですね。&lt;/p&gt; &lt;p&gt;関数IIFだと、ショートサーキットではありません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;使い方は、こうです。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;IF（判定式,Trueパート,Falseパート)&lt;/p&gt; &lt;p&gt;もしくは、&lt;/p&gt; &lt;p&gt;IF（Trueパート、Falseパート） &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、すごいね、3項演算子から、判定式まで省略できるように進化してしまったよ！&lt;/p&gt; &lt;p&gt;#っていうか、ぶっちゃけそこまでいらねー&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;3項演算については、もうだいたいわかっている機能なんですが、2項演算になってしまったというか、&lt;/p&gt; &lt;p&gt;&lt;strong&gt;IF（Trueパート、Falseパート）&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;なによ、これ？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MSDNで検索。&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx" href="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx"&gt;http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Boolean 引数を省略するときは、1 番目の引数に参照型または null 許容型を指定する必要があります。1 番目の引数が Nothing と評価されると、2 番目の引数の値が返されます。それ以外のすべての場合は、1 番目の引数の値が返されます。次の例は、この評価がどのように動作するのかを示します。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;つまり、判定する式と値が一体化してしまったような形ですね。判定対象はNothingになります。&lt;/p&gt; &lt;p&gt;注意するのが、1番目の引数が参照型もしくは、Null許容型でなくちゃならないってことでしょうか。&lt;/p&gt; &lt;p&gt;#使い道がわからん &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; ネタ元のコメントには、？が使いたいならC#を使えば？とか、かいてあったり、これイイヨ！とか、賛否両論&lt;/p&gt; &lt;p&gt;な感じですが、私は素直に喜べる機能じゃないかと思ってます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/127492.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>VB.NETでForループで型推論をしたときのワナ</title><link>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx</link><pubDate>Thu, 27 Dec 2007 18:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/114984.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/114984.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/114984.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;巷で、祭りになってる(ｵｲ Forループのときの型推論についてです。&lt;/p&gt; &lt;p&gt;VB.NETだけの話で、C#では、絶対におきないんです。なぜって、Varって書くから。&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;Option Compare Binary&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Strict On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Explicit On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Infer On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Module&lt;/font&gt; InferSample&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i = &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt;&amp;nbsp;&lt;font color="#c00040"&gt;10&lt;/font&gt;&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; Console.WriteLine(&lt;font color="#c00040"&gt;"Mr.Tはコング！"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Module&lt;/font&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;これが型推論が行われているパターン。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;Option Compare Binary&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Strict On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Explicit Off&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Infer Off&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Module&lt;/font&gt; InferSample&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i = &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt;&amp;nbsp;&lt;font color="#c00040"&gt;10&lt;/font&gt;&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; Console.WriteLine(&lt;font color="#c00040"&gt;"Mr.Tはコング！"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Module&lt;/font&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;これが、型推論がおこなわれていないパターン。&lt;/p&gt; &lt;p&gt;変数iは、上がintegerになります。下は、objectになります。&lt;/p&gt; &lt;p&gt;Main内はおんなじです。&lt;/p&gt; &lt;p&gt;ソース見ただけじゃ、わかりません。&lt;/p&gt; &lt;p&gt;ええ、Explicit Onがページ内に指定されていればいいです。指定されていなければ、そのページ内だけじゃわかりません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000" size="6"&gt;&lt;strong&gt;こんなの使えん！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そういうわけで、VB.NETでForループじゃ、型推論絶対つかうな派です。&lt;/p&gt; &lt;p&gt;#ごめんなさい、こんな程度しか、まだついていけません。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/114984.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>カンマ区切りで出力</title><link>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx</link><pubDate>Sun, 28 Oct 2007 02:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/104558.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/104558.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/104558.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx" href="http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx"&gt;http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;いや、カンマ区切りであるなら、VB系で忘れちゃならないもんがあると思ひます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;例題のように１次元配列になってるんなら、&lt;/p&gt; &lt;p&gt;Dim TargetData() as String = {"1","2","3"}&lt;/p&gt; &lt;p&gt;System.Console.Write(Join(TargetData,","))&lt;/p&gt; &lt;p&gt;この一行で出てきます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Joinの引数は、String配列、もしくはObject配列なので、Converterで変換かませばいいわけなんで、&lt;/p&gt; &lt;p&gt;それほど面倒にはならないと思います。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/104558.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>