私はこのコードを持っています:
String testData = File.ReadAllText("siteQueryTest.txt");
XDocument xmlDoc = XDocument.Parse(testData);
List<SiteQuery> sitequeries =
(from sitequery in xmlDoc.Descendants("SiteQuery")
select new SiteQuery
{
Id = Convert.ToInt32(sitequery.Element("Id").Value),
UPCPackSize = Convert.ToInt32(sitequery.Element("UPCPackSize").Value),
UPC_Code = sitequery.Element("UPC_Code").Value,
crvId = sitequery.Element("crvId").Value,
dept = Convert.ToInt32(sitequery.Element("dept").Value),
description = sitequery.Element("description").Value,
openQty = Convert.ToDouble(sitequery.Element("openQty").Value),
packSize = Convert.ToInt32(sitequery.Element("packSize").Value),
subDept = Convert.ToInt32(sitequery.Element("subDept").Value),
unitCost = Convert.ToDecimal(sitequery.Element("unitCost").Value),
unitList = Convert.ToDecimal(sitequery.Element("unitList").Value),
vendorId = sitequery.Element("vendorId").Value,
vendorItem = sitequery.Element("vendorItem").Value,
}).ToList<SiteQuery>();
testData は次のとおりです。
<SiteQueries><SiteQuery><Id>00006000002</Id><UPCPackSize>1</UPCPackSize><UPC_Code>00006000002</UPC_Code><crvId></crvId><dept>8</dept><description>ZZ</description><openQty>0.0</openQty><packSize>1</packSize><subDept>80</subDept><unitCost>1.25</unitCost><unitList>5.0</unitList><vendorId>CONFLICT</vendorId><vendorItem>123456</vendorItem></SiteQuery>
. . . // gazillions of other SiteQuery "records"
<SiteQuery><Id>5705654</Id><UPCPackSize>1</UPCPackSize><UPC_Code>5705654</UPC_Code><crvId></crvId><dept>2</dept><description>what do you want</description><openQty>0.0</openQty><packSize>1</packSize><subDept>0</subDept><unitCost>0.55</unitCost><unitList>1.62</unitList><vendorId></vendorId><vendorItem></vendorItem></SiteQuery></SiteQueries>
しかし、このコードとデータで次の実行時例外が発生します。
System.OverflowException was unhandled
_HResult=-2146233066
_message=Value was either too large or too small for an Int32.
HResult=-2146233066
IsTransient=false
Message=Value was either too large or too small for an Int32.
Source=mscorlib
StackTrace:
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at Sandbox.Form1.<button56_Click>b__e(XElement sitequery) in c:\HoldingTank\Sandbox\Form1.cs:line 2041
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
. . .
InnerException:
各 xml「レコード」には、いくつかの int 値 (4) があります。何千ものレコードがあります。Rainman ハット (私にはあまり似合いません) を被ろうとせずに、オーバーフローまたはアンダーフローを引き起こしている問題のある値を特定するにはどうすればよいでしょうか?
アンダーフローの場合 (例外 msg は、"OverflowException" と "Value was too large or too small for an Int32" の両方を示しています)、これらの 4 つの int メンバーのいずれかの空の値が原因である可能性がありますか? その場合、どうすればよいですか?空の値を 0 と見なすように指示しますか?