By Steven Mandel | Article Rating: |
|
May 10, 2006 04:15 PM EDT | Reads: |
20,832 |
You might be wondering what this book is all about. As the author explains, the dictionary's definition of a gotcha is "an unexpected usually disconcerting challenge, revelation, or catch". Mr. Subramaniam defines the gotchas in his book as "those things that pop up unexpectedly when you're programming in .NET. … In this book I focus on the .NET framework and features that have consistently exhibited behavior that was not obvious to me." Mr. Subramaniam explains that the purpose of his book is not just to explain how to use a technology "but how to use it well and do things right". The book is intended for ".NET programmers in the trenches". He assumes that you are fairly familiar with .NET and all gotchas are presented in C# and VB.NET. The book is organized into 8 chapters focusing in on different areas of interest. Each topic in a chapter includes a discussion of the gotcha, code examples and possible solutions. There are also footnotes and a bibliography for further study of the topic.
The book contains fascinating discussions on a myriad of topics. Some of the topics discussed are Language API Gotchas, Visual Studio and Complier Gotchas as well as Inheritance and Polymorphism Gotchas If you do a lot of multithreading you will definitely want to read this chapter.
I would like to present a Gotcha that I have encountered that Mr. Subramaniam touches on in Gotcha #2: struct and classdiffer in behavior" and is discussed by Les Smith in his article located at www.knowdotnet.com/articles/boxedstructures.html. In .NET a class is treated as a reference type while a structure is treated as a value type. The gotcha occurs when you place a structure inside an arraylist. If you try to iterate through the arraylist to make changes to each structure, you will be surprised to find that the changes do not take effect. In my code below, I declare a structure and an arraylist. I add two entries to the arraylist and then iterate through the list to change the value of gamesPlayed.
Option Strict On
Public Structure Player
Public firstName As String
Public lastName As String
Public gamesPlayed As Integer
End Structure
Public Sub ArrayList_Structure
Dim myTeam As New ArrayList
Dim myPlayer As Player
Dim intCount As Integer
Dim intEnd As Integer
myPlayer.firstName = "Bob"
myPlayer.lastName = "Smith"
myPlayer.gamesPlayed = 0
myTeam.Add(myPlayer)
myPlayer.firstName = "Jane"
myPlayer.lastName = "Doe"
myPlayer.gamesPlayed = 0
myTeam.Add(myPlayer)
For Each myPlayer In myTeam
myPlayer.gamesPlayed += 1
Next
For Each myPlayer In myTeam
Response.Write( _
myPlayer.firstName _& " " _
& myPlayer.lastName _& " " _
& myPlayer.gamesPlayed.ToString _
& "<br/>")
Next
The results of this code are:
Bob Smith 0
Jane Doe 0
This is definitely not what you expected but is due to the fact that structures and arraylist are different types. To solve this problem you could do the following:
intCount = 0
intEnd = myTeam.Count - 1
While intCount <= intEnd
myPlayer = CType(myTeam(intCount), Player)
myPlayer.gamesPlayed += 1
myTeam(intCount) = myPlayer
intCount += 1
End While
For Each myPlayer In myTeam
Response.Write( _
myPlayer.firstName _& " " _
& myPlayer.lastName _& " " _
& myPlayer.gamesPlayed.ToString _
& "<br/>")
Next
End Sub
By converting the selected entry back into a structure you are now able to change it and then you can put it back into the arraylist with the following results.
Bob Smith 1
Jane Doe 1
.Net Gotchas is a very interesting book that covers a whole slew of topics. It is well worth reading especially if you have encountered the same gotchas and could not discover a way to solve them.
Published May 10, 2006 Reads 20,832
Copyright © 2006 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Steven Mandel
Steven Mandel has worked in the IT industry for over 15 years designing databases using Microsoft Access and SQL Server. He has developed Web and Windows applications using VB.NET and has written numerous articles and reviews about ASP.NET and VB.NET.
Feb. 21, 2019 11:00 AM EST |
By Zakia Bouachraoui ![]() Feb. 21, 2019 10:45 AM EST |
By Roger Strukhoff Feb. 21, 2019 09:15 AM EST |
By Pat Romanski Feb. 21, 2019 09:00 AM EST |
By Zakia Bouachraoui Feb. 21, 2019 06:00 AM EST |
By Yeshim Deniz Feb. 21, 2019 04:30 AM EST |
By Zakia Bouachraoui ![]() Feb. 19, 2019 04:15 PM EST |
By Yeshim Deniz ![]() Feb. 18, 2019 07:45 AM EST |
By Zakia Bouachraoui Feb. 17, 2019 05:00 PM EST |
By Elizabeth White ![]() Feb. 16, 2019 04:45 PM EST Reads: 14,062 |