« Code Generation | Main | My quest for the ultimate TabletPC »

Today's Minor Complaint...

Posted 2003-11-06 11:41 AM in XML.

Why is this OK:

using (StringReader sr = new StringReader(response))
{
   try
   {
      retVal = xs.Deserialize(sr);
   }
    //yada yada yada

}

Why and this isnt?

using (XmlTextReader xr = new XmlTextReader(new StringReader(response), /*...yada yada...*/)
{
   try
   {
      retVal = xs.Deserialize(sr);
   }
    //yada yada yada

}

Because StringReaders derive from System.IO.TextReader which implements IDisposable and that's what the using keywords cares about.  XmlTextReader derives from the abstract XmlReader, and noone implements IDisposable. I suppose this has something to do with closing streams in the right order, blah blah.  Either way, it was a minor sadness today.

Poop.



Thursday, November 06, 2003 2:36:52 PM (Pacific Standard Time, UTC-08:00)
hi scott, what about this:

using System;
using System.Xml;

class DisposableXmlTextReader : XmlTextReader, IDisposable {
public void Dispose() {
base.Close();
}
}

I bet the formatting is going to get beaten up, but you get the idea. XmlTextReader is not sealed, so this should work. Or should it?
Friday, November 07, 2003 4:09:49 AM (Pacific Standard Time, UTC-08:00)
That's a bit too far I think. Perhaps this is cleaner:

using (StringReader s = new StringReader(response))
{
XmlTextReader xr = new XmlTextReader(s);

...
}

You don't care about IDisposable on XmlTextReader if all you want is the StringReader to be ditched properly.

Dave
Dave Van den Eynde
Saturday, November 08, 2003 1:06:14 PM (Pacific Standard Time, UTC-08:00)
True on both counts...I was just complaining basically that anything that was a "Reader" wasn't Disposable...I've gotten REALLY used to using the "using" keyword, and I prefer it over explicit close() calls.

Of course, I don't care so much as to make a separate derived class, but thanks for the thoughts! :)
Scott Hanselman
Tuesday, November 11, 2003 11:20:13 PM (Pacific Standard Time, UTC-08:00)
FYI, I'm PM for XmlReader, and this was an oversight and is fixed in v2. If you have PDC bits, I believe that copy of frameworks already has the fix -- obviously you would not use this for production work, but the point is we are aware of the problem and are fixing it in v.Next. Thanks!
Thursday, February 16, 2006 2:51:16 PM (Pacific Standard Time, UTC-08:00)
Just found your post while googling for the reason why this wasn't implemented. I'm using V2 and it's definitely NOT fixed in V2. So I had to implement this:

def auto_close(obj)
yield obj if block_given?
obj.Close
end

...

auto_close(XmlTextReader.new(path)) do |r|
while r.Read
puts r.LocalName if r.NodeType == XmlNodeType::Element
end
end

Isn't Ruby great? :)
Comments are closed.

Contact

Sponsors

Hosting By

Hot Topics

Tags

Calendar

<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Archives

March, 2010 (10)
February, 2010 (17)
January, 2010 (13)
December, 2009 (13)
November, 2009 (7)
October, 2009 (19)
September, 2009 (11)
August, 2009 (12)
July, 2009 (21)
June, 2009 (26)
May, 2009 (16)
April, 2009 (13)
March, 2009 (17)
February, 2009 (17)
January, 2009 (18)
December, 2008 (32)
November, 2008 (17)
October, 2008 (22)
September, 2008 (16)
August, 2008 (14)
July, 2008 (25)
June, 2008 (19)
May, 2008 (17)
April, 2008 (17)
March, 2008 (26)
February, 2008 (21)
January, 2008 (28)
December, 2007 (19)
November, 2007 (17)
October, 2007 (31)
September, 2007 (39)
August, 2007 (37)
July, 2007 (43)
June, 2007 (37)
May, 2007 (32)
April, 2007 (38)
March, 2007 (29)
February, 2007 (46)
January, 2007 (31)
December, 2006 (27)
November, 2006 (31)
October, 2006 (32)
September, 2006 (39)
August, 2006 (34)
July, 2006 (40)
June, 2006 (18)
May, 2006 (31)
April, 2006 (34)
March, 2006 (30)
February, 2006 (38)
January, 2006 (44)
December, 2005 (19)
November, 2005 (34)
October, 2005 (24)
September, 2005 (37)
August, 2005 (20)
July, 2005 (24)
June, 2005 (33)
May, 2005 (16)
April, 2005 (22)
March, 2005 (34)
February, 2005 (15)
January, 2005 (37)
December, 2004 (28)
November, 2004 (30)
October, 2004 (34)
September, 2004 (22)
August, 2004 (34)
July, 2004 (18)
June, 2004 (64)
May, 2004 (49)
April, 2004 (21)
March, 2004 (29)
February, 2004 (29)
January, 2004 (36)
December, 2003 (25)
November, 2003 (24)
October, 2003 (59)
September, 2003 (42)
August, 2003 (24)
July, 2003 (44)
June, 2003 (29)
May, 2003 (21)
April, 2003 (30)
March, 2003 (27)
February, 2003 (47)
January, 2003 (50)
December, 2002 (31)
November, 2002 (38)
October, 2002 (44)
September, 2002 (15)
May, 2002 (2)
April, 2002 (4)

Google Ads