Information Technology Reference
In-Depth Information
var data = new CSVDataContainer (
new System.IO. StringReader (myCSV));
foreach ( var item in data.Rows)
Console .WriteLine( "{0}, {1}, {2}" ,
item.Name, item.PhoneNumber, item.Label);
data = new CSVDataContainer (
new System.IO. StringReader (myCSV2));
foreach ( var item in data.Rows)
Console .WriteLine( "{0}, {1}, {2}" ,
item.Date, item.high, item.low);
That's the API style I want for a general CSV reader class. The rows
returned from enumerating the data contain properties for every row
header name. Obviously, the row header names are not known at compile
time. Those properties must be dynamic. But nothing else in the
CSVDataContainer needs to be dynamic. The CSVDataContainer does
not support dynamic typing. However, the CSVDataContainer does con-
tain APIs that return a dynamic object that represents a row:
public class CSVDataContainer
{
private class CSVRow : DynamicObject
{
private List < Tuple < string , string >> values =
new List < Tuple < string , string >>();
public CSVRow( IEnumerable < string > headers,
IEnumerable < string > items)
{
values.AddRange(headers.Zip(items,
(header, value) => Tuple .Create(header,
value)));
}
public override bool TryGetMember(
GetMemberBinder binder,
out object result)
{
var answer = values.FirstOrDefault(n =>
n.Item1 == binder.Name);
result = answer.Item2;
Search WWH ::




Custom Search