<?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>VB</title><link>http://blogs.wankuma.com/masaru/category/1288.aspx</link><description>VB</description><managingEditor>まさる（高野 将、TAKANO Sho）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>まさる（高野 将、TAKANO Sho）</dc:creator><title>「VBプログラマが知るべき9のこと」が@ITに転載されました</title><link>http://blogs.wankuma.com/masaru/archive/2011/05/11/198987.aspx</link><pubDate>Wed, 11 May 2011 22:11:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2011/05/11/198987.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/198987.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2011/05/11/198987.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/198987.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/198987.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_01/greatblogentry_01_01.html"&gt;.NET開発を始めるVB6プログラマーが知るべき9のこと － ＠IT&lt;/a&gt;&lt;/p&gt; &lt;p&gt;@IT：Insider.NETの「.NET開発者中心」にて、今日から始まった企画の第1回目として、誠に恐縮ながら私の記事が選ばれました。&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;&lt;a href="http://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_index/index.html"&gt;.NET開発者中心 厳選ブログ記事 － ＠IT&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;世界中にあるブログ・コンテンツから優秀なブログ記事を編集部が厳選して転載。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;これからどんな記事が紹介されていくのか楽しみですね！&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/198987.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる（高野 将、TAKANO Sho）</dc:creator><title>VBプログラマが知るべき9のこと by @masaru_b_cl</title><link>http://blogs.wankuma.com/masaru/archive/2011/02/26/197259.aspx</link><pubDate>Sat, 26 Feb 2011 12:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2011/02/26/197259.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/197259.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2011/02/26/197259.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/197259.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/197259.aspx</trackback:ping><description>&lt;p&gt;なんとなく「はてな」の方に書きました。&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/masaru_b_cl/20110217/1297901500" alt="VBプログラマが知るべき9のこと by @masaru_b_cl" target="_blank"&gt;VBプログラマが知るべき9のこと by @masaru_b_cl&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
間違い、認識違いなどあったら、躊躇なくツッコミお願いします&lt;(_ _)&gt;
&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/197259.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>XElementをXmlNodeに変換</title><link>http://blogs.wankuma.com/masaru/archive/2009/12/11/183743.aspx</link><pubDate>Fri, 11 Dec 2009 22:11:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/12/11/183743.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/183743.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/12/11/183743.aspx#Feedback</comments><slash:comments>37</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/183743.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/183743.aspx</trackback:ping><description>&lt;p&gt;ちょっと必要になったので。&lt;/p&gt; &lt;p&gt;＃コードはXMLリテラルでXElementが簡単に作れるVBで。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;その１：XmlDocument.LoadXmlメソッドにXElementをToStringして食わせる&lt;/h3&gt; &lt;p&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8b9df3ca-0f52-41ad-bc9d-b0aa3185a1cc" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Dim xelm = _
  &amp;lt;parent&amp;gt;
    &amp;lt;child&amp;gt;
      ほげほげ
    &amp;lt;/child&amp;gt;
  &amp;lt;/parent&amp;gt;

Dim xmlDoc As New XmlDocument()
xmlDoc.LoadXml(xelm.ToString())
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;その２：XmlDocument.LoadメソッドにXElement.CreateReaderで作成したXmlReaderを食わせる&lt;/h3&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fa3ed0e2-6d73-444c-8dcd-61933000edd5" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Dim xelm = _
  &amp;lt;parent&amp;gt;
    &amp;lt;child&amp;gt;
      ほげほげ
    &amp;lt;/child&amp;gt;
  &amp;lt;/parent&amp;gt;

Using reader As XmlReader = xelm.CreateReader()
  Dim xmlDoc As New XmlDocument()
  xmlDoc.Load(reader)
End Using
&lt;/pre&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;img src ="http://blogs.wankuma.com/masaru/aggbug/183743.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>VWDでVBを選んだ場合、既定でOption StrictはOff</title><link>http://blogs.wankuma.com/masaru/archive/2009/10/21/182277.aspx</link><pubDate>Wed, 21 Oct 2009 00:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/10/21/182277.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/182277.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/10/21/182277.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/182277.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/182277.aspx</trackback:ping><description>&lt;p&gt;VWDを使ってWebサイトを作成してWeb.configを見てみると・・・
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image_thumb.png" border="0" height="226" width="531" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;というわけで、Option Strictは既定でOffなのです。
&lt;/p&gt;
&lt;p&gt;ですので、もちろん分離コードでこんなこと書いてもビルドエラーにはなりません。
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image_3.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image_thumb_3.png" border="0" height="138" width="332" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;かといって、Web.configを直しても自動的にOption Strinct Onになってくれるわけではないようで、
&lt;/p&gt;
&lt;p&gt;Option Strict Onにしたかったら、分離コードで明示的に指定してやる必要があるようです。
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image_4.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://masaru.wankuma.com/img/blogimg/VWDVBOptionStrictOff_304/image_thumb_4.png" border="0" height="210" width="664" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;&lt;font color="#cccccc"&gt;だからVBは嫌いなんだorz&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;&lt;font color="#cccccc"&gt;C#だったらこんなことはないのに・・・&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h4&gt;[追記：2009/10/26]
&lt;/h4&gt;
&lt;p&gt;このエントリは「ASP.NET Web サイト」の場合についてです。「ASP.NET Web アプリケーション プロジェクト」の場合、プロジェクトのプロパティからOption Strictの設定は可能です。
&lt;/p&gt;
&lt;p&gt;また、ダッチさんのコメントによると、「ASP.NET Web サイト」の場合も、web.configファイルをいじくることで、Option Strictを有効にできるようです。
&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/182277.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>FizzBuzz＞それLINQで＞それワンライナーで</title><link>http://blogs.wankuma.com/masaru/archive/2009/10/03/181803.aspx</link><pubDate>Sat, 03 Oct 2009 08:15:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/10/03/181803.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/181803.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/10/03/181803.aspx#Feedback</comments><slash:comments>224</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/181803.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/181803.aspx</trackback:ping><description>&lt;p&gt;なんか某社長の記事発端なのか、また流行ってるみたいなので。&lt;/p&gt; &lt;p&gt;＃「1から10までの総和」祭りもそれよね&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;C#&lt;/h3&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fa0d1725-ac6a-40d3-be69-aed710d7f01d" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;Enumerable.Range(1,100).Select(n=&amp;gt;n%15==0?"FizzBuzz":n%3==0?"Fizz":n%5==0?"Buzz":n.ToString()).ToList().ForEach(Console.WriteLine);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;VB&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f7b1d526-6441-4324-90c1-b096f453985f" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Enumerable.Range(1,100).Select(Function(n)If(n Mod 15=0,"FizzBuzz",If(n Mod 3=0,"Fizz",If(n Mod 5=0,"Buzz",n.ToString())))).ToList().ForEach(AddressOf Console.WriteLine)&lt;/pre&gt;&lt;/div&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/181803.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>VBでProducer/Consumerパターン</title><link>http://blogs.wankuma.com/masaru/archive/2009/09/16/181309.aspx</link><pubDate>Wed, 16 Sep 2009 22:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/09/16/181309.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/181309.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/09/16/181309.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/181309.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/181309.aspx</trackback:ping><description>&lt;p&gt;ネタ元：&lt;a href="http://blogs.wankuma.com/episteme/archive/2009/09/16/181289.aspx"&gt;生産者 と 消費者&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;＃勝手にportしちゃうぞ企画第２段ｗ&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;今回はMSDNライブラリ「&lt;a href="http://msdn.microsoft.com/ja-jp/library/yy12yx1f.aspx"&gt;方法 : producer スレッドと consumer スレッドを同期する (C# プログラミング ガイド)&lt;/a&gt;」のコードをVBにportしました。&lt;/p&gt; &lt;p&gt;VBに変換する際気を付けるのは、以下のような点。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;lockステートメントはSyncLock  &lt;li&gt;配列の初期化方法が違う&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;コードは以下の通り。&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:575fc333-ef35-416d-84bf-46aa62182276" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Imports System.Threading

Public Class SyncEvents
	Private _newItemEvent As EventWaitHandle
	Public ReadOnly Property NewItemEvent() As EventWaitHandle
		Get
			Return _newItemEvent
		End Get
	End Property

	Private _exitThreadEvent As EventWaitHandle
	Public ReadOnly Property ExitThreadEvent() As EventWaitHandle
		Get
			Return _exitThreadEvent
		End Get
	End Property

	Private _eventArray As WaitHandle()
	Public ReadOnly Property EventArray() As WaitHandle()
		Get
			Return _eventArray
		End Get
	End Property

	Public Sub New()
		_newItemEvent = New AutoResetEvent(False)
		_exitThreadEvent = New ManualResetEvent(False)
		_eventArray = New WaitHandle() {_newItemEvent, _exitThreadEvent}
	End Sub
End Class

Public Class Producer
	Private _queue As Queue(Of Integer)
	Private _syncEvents As SyncEvents

	Public Sub New(ByVal q As Queue(Of Integer), ByVal e As SyncEvents)
		_queue = q
		_syncEvents = e
	End Sub

	Public Sub ThreadRun()
		Dim count As Integer = 0
		Dim r As New Random()
		While Not _syncEvents.ExitThreadEvent.WaitOne(0, False)
			SyncLock DirectCast(_queue, ICollection).SyncRoot
				While _queue.Count &amp;lt; 20
					_queue.Enqueue(r.Next(0, 100))
					_syncEvents.NewItemEvent.Set()
					count += 1
				End While
			End SyncLock
		End While
		Console.WriteLine("Producer thread: produced {0} items", count)
	End Sub
End Class

Public Class Consumer
	Private _queue As Queue(Of Integer)
	Private _syncEvents As SyncEvents

	Public Sub New(ByVal q As Queue(Of Integer), ByVal e As SyncEvents)
		_queue = q
		_syncEvents = e
	End Sub

	Public Sub ThreadRun()
		Dim count As Integer = 0
		While WaitHandle.WaitAny(_syncEvents.EventArray) &amp;lt;&amp;gt; 1
			SyncLock DirectCast(_queue, ICollection).SyncRoot
				Dim item As Integer = _queue.Dequeue()
				count += 1
			End SyncLock
		End While
		Console.WriteLine("Consumer thread: consumed {0} items", count)
	End Sub
End Class

Public Class Program
	Private Shared Sub ShowQueueContents(ByVal q As Queue(Of Integer))
		SyncLock DirectCast(q, ICollection).SyncRoot
			For Each item As Integer In q
				Console.Write("{0} ", item)
			Next
		End SyncLock
		Console.WriteLine()
	End Sub

	Public Shared Sub Main()
		Dim queue As New Queue(Of Integer)
		Dim syncEvent As New SyncEvents()

		Console.WriteLine("Configuring worker threads...")

		Dim producer As New Producer(queue, syncEvent)
		Dim cunsumer As New Consumer(queue, syncEvent)

		Dim producerThread As New Thread(AddressOf producer.ThreadRun)
		Dim consumerThread As New Thread(AddressOf cunsumer.ThreadRun)

		Console.WriteLine("Launching producer and consumer threads...")

		producerThread.Start()
		consumerThread.Start()

		For i As Integer = 0 To 3
			Thread.Sleep(2500)
			ShowQueueContents(queue)
		Next i

		Console.WriteLine("Signaling threadds to terminate...")

		syncEvent.ExitThreadEvent.Set()

		producerThread.Join()
		consumerThread.Join()
	End Sub
End Class&lt;/pre&gt;&lt;/div&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/181309.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>「オススメしないとはいうものの」をVBに直してみた</title><link>http://blogs.wankuma.com/masaru/archive/2009/09/01/180737.aspx</link><pubDate>Tue, 01 Sep 2009 19:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/09/01/180737.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/180737.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/09/01/180737.aspx#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/180737.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/180737.aspx</trackback:ping><description>&lt;p&gt;ネタ元：&lt;a href="http://blogs.wankuma.com/episteme/archive/2009/09/01/180721.aspx"&gt;オススメしないとはいうものの&lt;/a&gt;&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;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;あげる側 Form1&lt;/h4&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:db6f756f-1598-4211-a1c7-a63049c6d888" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Public Partial Class Form1

  Public Sub New()
    InitializeComponent()
    self_ = Me   ' ここでオノレをセット
  End Sub

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Dim form2 As New Form2()
    form2.Show()
  End Sub

  Private Shared self_ As Form1

  ' read-onlyならまぁ、実害もなかろうと。
  Public ReadOnly Property GlobalValue() As String
    Get
      Return self_.TextBox1.Text
    End Get
  End Property

End Class&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;もらう側 Form2&lt;/h4&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cd1b109d-6921-4429-b132-c72afb44f834" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb"&gt;Public Partial Class Form2

  Public Sub New()
    InitializeComponent()
  End Sub

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    TextBox1.Text = Form1.GlobalValue       ' ここでもらう。
  End Sub

End Class&lt;/pre&gt;&lt;/div&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/180737.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>VB10の複数行のラムダ式</title><link>http://blogs.wankuma.com/masaru/archive/2009/06/18/175804.aspx</link><pubDate>Thu, 18 Jun 2009 06:11:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/06/18/175804.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/175804.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/06/18/175804.aspx#Feedback</comments><slash:comments>49</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/175804.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/175804.aspx</trackback:ping><description>&lt;p&gt;ネタ元：&lt;a href="http://shinichiaoyagi.blog25.fc2.com/blog-entry-171.html"&gt;青柳 臣一 ブログ（総合） [VB10] Visual Basic 2010 の新機能&lt;/a&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;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb531253(VS.100).aspx"&gt;Visual Studio 2010 - Visual Basic : Lambda Expressions&lt;/a&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:63f61283-7434-415e-b918-a29af20cf865" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="vb:nogutter:nocontrols"&gt;Dim increment2 = Function(x)
                     Return x + 2
                 End Function
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: center; color: red; font-size: 64pt"&gt;きもっ！&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/175804.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>VB9のIf演算子の戻り値の型は第2、第3引数の型になる</title><link>http://blogs.wankuma.com/masaru/archive/2009/03/13/169673.aspx</link><pubDate>Fri, 13 Mar 2009 23:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/03/13/169673.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/169673.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/03/13/169673.aspx#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/169673.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/169673.aspx</trackback:ping><description>&lt;p&gt;VB9で追加された&lt;a href="http://msdn.microsoft.com/ja-jp/library/bb513985.aspx"&gt;If演算子&lt;/a&gt;。今までの&lt;a href="http://msdn.microsoft.com/ja-jp/library/27ydhh0d(VS.80).aspx"&gt;IIf関数&lt;/a&gt;ではショートサーキットしてくれなかったので、非常にありがたく使わせてもらっています。
&lt;/p&gt;
&lt;p&gt;このIf演算子の戻り値の型は、タイトル通り第2、第3引数の型から推論されて決定されるようです。
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:09f2b37c-3ba3-453f-84ec-d7d2cdd11811" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="vb"&gt;' String型
Dim value1 = If(True, Nothing, "hoge")
' Integer型
Dim value2 = If(True, Nothing, 0)
' Date型
Dim value3 = If(True, Nothing, DateTime.Today)&lt;/pre&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;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:bdfbb234-a531-4d1c-8ae1-9fe964d50aa0" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="vb"&gt;' valueに格納される値は？
Dim value As Nullable(Of Date) = If(True, Nothing, DateTime.Today)&lt;/pre&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;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;わかりましたか？
&lt;/p&gt;
&lt;p&gt;答えは、Date型の 0001/01/01 0:00:00 です。
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;なぜこのような動きになるのかは、以下のように考えられます。
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;If演算子の結果はNothing &lt;/li&gt;
  &lt;li&gt;しかし、第3引数はDate型なので、値をDate型で返そうとする &lt;/li&gt;
  &lt;li&gt;Date型の変数にNothingを代入した際、DateTime.MinValueが設定される &lt;/li&gt;
  &lt;li&gt;したがって、valueにはDateTime.MinValueが設定される&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最初この動作を見た時は意味がわからなくて焦りました(^^;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;なお、値をNullable(Of Date)で返すには、キャストを使って次のようにしなければなりません。
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:64a88551-6a3d-4e51-adc0-55125887bd4e" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="vb"&gt;Dim value5 As Nullable(Of Date) = _
 DirectCast(If(True, Nothing, DirectCast(DateTime.Today, Object)) _
 　, Nullable(Of Date))&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;ちなみに、C#で条件演算子を使った場合、
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:750373c7-0b28-4d72-b8d3-a167656fc7bf" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="c#"&gt;DateTime? value4 = true ? null : DateTime.Today;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;というコードはコンパイルエラーになります。
&lt;/p&gt;
&lt;p&gt;やはりキャストを使って、
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4167a05f-42f3-40b9-b654-ad2f0747ad81" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="c#"&gt;DateTime? value5 = (DateTime?) (true ? null : (object)DateTime.Today);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&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;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt; [追記：2009/03/15]
&lt;/p&gt;
&lt;p&gt;よねけんさんが指摘してくださいました。NothingをNullable(Of Date)にキャストするだけでよかったようです。
&lt;/p&gt;
&lt;p&gt;また、このコードの場合は、暗黙的型定義もされるようなので、結論としては以下のようにすればもっとすっきりするようです。&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
  &lt;pre name="code" class="vb"&gt;Dim value6 = If(True, DirectCast(Nothing, Date?), DateTime.Today)&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;ちなみにC#の場合は次の通り。&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
    &lt;pre name="code" class="c#"&gt;var value6 = true ? (DateTime?)null : DateTime.Today;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;あともう一つ、VB9ではNullable型の定義に「(型名)?」のように、「?」を添付する形式が使えるようになっていたことを知りませんでした。&lt;/p&gt;
&lt;p&gt;小さいけれど、これもうれしい変更の一つですね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/169673.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>DataTableのある列を集計する</title><link>http://blogs.wankuma.com/masaru/archive/2009/03/13/169671.aspx</link><pubDate>Fri, 13 Mar 2009 22:49:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2009/03/13/169671.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/169671.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2009/03/13/169671.aspx#Feedback</comments><slash:comments>210</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/169671.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/169671.aspx</trackback:ping><description>&lt;p&gt;従来、DataTableのある列（例えば数量、金額など）を集計する際は、foreachを用いて以下のようにしていたかと思います。&lt;/p&gt; &lt;h5&gt;C#&lt;/h5&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b67d83eb-82d9-430b-994e-58778626b8e9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;var sumQty = 0m;
foreach (dr in dt)
{
	sumQty += dr.Qty;
}&lt;/pre&gt;&lt;/div&gt;
&lt;h5&gt;VB&lt;/h5&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8e2d3533-67ad-4d03-96d1-4d248d518ed7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb"&gt;Dim sumQty = 0D
For Each dr In dt
	sumQty += dr.Qty
Next&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;これが、.NET Framework 3.5 以降では、LINQを用いて以下のように書けます。&lt;/p&gt;
&lt;h5&gt;C#&lt;/h5&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4e25778a-e35e-4ca3-85c5-211f67c727d9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;var sumQty = dt.Select(dr =&amp;gt; dr.Qty).Sum();&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h5&gt;VB&lt;/h5&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:148e075b-02b3-473f-a56e-9d69ed3204b4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;Dim sumQty = dt.Select(Function(dr) dr.Qty).Sum()&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;単純な集計とはいえ、foreachを書かなくていいのはわかりやすくていいですね。&lt;/p&gt;
&lt;p&gt;なお、次のようにしてもできます。IEnumerable(T)のSumメソッドを使います。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;C#&lt;/h4&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4d69aa0e-e3bc-462c-99f0-fa876aee568a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;var sumQty = dt.Sum(dr =&amp;gt; dr.Qty);&lt;/pre&gt;&lt;/div&gt;
&lt;h5&gt;VB&lt;/h5&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0aa5ab7a-906b-4588-8821-6711d1a4b3bd" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb"&gt;Dim sumQty = dt.Sum(Function(dr) dr.Qty)&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;しかし、このやり方では、VBの方で「dr.」を入力した後、インテリセンスにQtyがてきません。&lt;/p&gt;
&lt;p&gt;C#は問題なくインテリセンスが利くので、VBの今後の型推論機能に期待ですね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/169671.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>