using System.Collections.Generic;
public static void Main()
ConfigurationItem reportDefinitionConfigItem = new ConfigurationItem()
Category = "ReportConfiguration",
Name = "ExternalInternationReport",
Parameters = new List<KeyValuePair>
new KeyValuePair("Design", "ExternalInternational"),
new KeyValuePair("FileName", "ExpertiseCheckExternal"),
new KeyValuePair("Name", "ExpertiseCheckExternal"),
new KeyValuePair("Order", "1"),
new KeyValuePair("SendToCustomer", "true"),
new KeyValuePair("PageList", "FinalEstimateInternationalPage")
Console.Write("Is reportDefinitionConfigItem have parameter names as same as report definition? " + reportDefinitionConfigItem.IsReportDefinition());
ConfigurationItem pageDefinitionConfigItem = new ConfigurationItem()
Category = "ReportConfiguration",
Parameters = new List<KeyValuePair>
new KeyValuePair("PicturesPerPage", "4")
Console.Write("Is pageDefinitionConfigItem have parameter names as same as report definition? " + pageDefinitionConfigItem.IsReportDefinition());
public static void PrintNamesOf(string title, IEnumerable<string> names)
Console.WriteLine(title);
foreach(var name in names)
public class ReportDefinition
public ReportDefinition()
PageList = new List<string>();
public string Name { get; set; }
public string FileName { get; set; }
public string Design { get; set; }
public int? Order { get; set; }
public bool SendToCustomer { get; set; }
public List<string> PageList { get; set; }
public class ConfigurationItem
public ConfigurationItem()
this.Parameters = new List<KeyValuePair>();
public string Category { get; set; }
public string Name { get; set; }
public bool IsLegacyConfiguration { get; set; }
public List<KeyValuePair> Parameters { get; set; }
public bool IsReportDefinition()
List<string> reportDefinitionPropertyNames = typeof(ReportDefinition)
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
IEnumerable<string> propertyNames = this.Parameters.Select(p => p.Key).OrderBy(s => s);
return reportDefinitionPropertyNames.SequenceEqual(propertyNames);
public class KeyValuePair
public KeyValuePair(string key, string value)
public string Key { get; set; }
public string Value{ get; set; }
public string DataTypeName { get; set; }
public static class CustomerConfigurationExtensions
private static List<string> reportDefinitionPropertyNames = typeof(ReportDefinition)
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
public static bool IsReportDefinition(this ConfigurationItem configItem)
IEnumerable<string> propertyNames = configItem.Parameters.Select(p => p.Key).OrderBy(s => s);
return reportDefinitionPropertyNames.SequenceEqual(propertyNames);