Converting Array To Dictionary
-
I am trying to convert an array to a dictionary but my code is throwing a null exception. Below is my code
static void Main(string\[\] args) { Product p1 = new Product(); p1.ProductSkew = 99; p1.ProductName = "Accord"; p1.Color = "Black"; p1.Price = 35000; Product p2 = new Product(); p2.ProductSkew = 46; p2.ProductName = "Corvette"; p2.Color = "Black"; p2.Price = 65000; Product p3 = new Product(); p3.ProductSkew = 35; p3.ProductName = "Altima"; p3.Color = "Black"; p3.Price = 32000; Product\[\] products = new Product\[3\]; products\[0\] = p1; products\[1\] = p2; products\[2\] = p3; Dictionary productlist = products.ToDictionary(p => p.ProductSkew, p => p); foreach (KeyValuePair item in productlist) { Product product = new Product(); product = item.Value; Console.WriteLine( "\\nSkew: {0} \\n" + "Name: {1} \\n" + "Color: {2} \\n" + "Price: {3} \\n", product.ProductSkew, product.ProductName, product.Color, product.Price ); } Console.ReadLine(); } } public class Product { public int ProductSkew { get; set; } public string ProductName { get; set; } public string Color { get; set; } public double Price { get; set; } public void AddProduct() { Console.WriteLine("Enter Product Skew."); this.ProductSkew = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter Product Name."); this.ProductName = Console.ReadLine(); Console.WriteLine("Enter Product Color."); this.Color = Console.ReadLine(); Console.WriteLine("Enter Product Price."); this.Price = Convert.ToDouble(Console.ReadLine()); } }
The syntax seems correct but when I step through the code inside of ToDictionay(), p.ProduckSkew is empty and I don't know why. Any help is greatly appreciated, thanks.
-
I am trying to convert an array to a dictionary but my code is throwing a null exception. Below is my code
static void Main(string\[\] args) { Product p1 = new Product(); p1.ProductSkew = 99; p1.ProductName = "Accord"; p1.Color = "Black"; p1.Price = 35000; Product p2 = new Product(); p2.ProductSkew = 46; p2.ProductName = "Corvette"; p2.Color = "Black"; p2.Price = 65000; Product p3 = new Product(); p3.ProductSkew = 35; p3.ProductName = "Altima"; p3.Color = "Black"; p3.Price = 32000; Product\[\] products = new Product\[3\]; products\[0\] = p1; products\[1\] = p2; products\[2\] = p3; Dictionary productlist = products.ToDictionary(p => p.ProductSkew, p => p); foreach (KeyValuePair item in productlist) { Product product = new Product(); product = item.Value; Console.WriteLine( "\\nSkew: {0} \\n" + "Name: {1} \\n" + "Color: {2} \\n" + "Price: {3} \\n", product.ProductSkew, product.ProductName, product.Color, product.Price ); } Console.ReadLine(); } } public class Product { public int ProductSkew { get; set; } public string ProductName { get; set; } public string Color { get; set; } public double Price { get; set; } public void AddProduct() { Console.WriteLine("Enter Product Skew."); this.ProductSkew = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter Product Name."); this.ProductName = Console.ReadLine(); Console.WriteLine("Enter Product Color."); this.Color = Console.ReadLine(); Console.WriteLine("Enter Product Price."); this.Price = Convert.ToDouble(Console.ReadLine()); } }
The syntax seems correct but when I step through the code inside of ToDictionay(), p.ProduckSkew is empty and I don't know why. Any help is greatly appreciated, thanks.
This is weird. Just copy-pasted your code. - VS 2013 - .net 4.5 - debug and release Works as expected. Best, John
-- Log Wizard - a Log Viewer that is easy and fun to use!
-
This is weird. Just copy-pasted your code. - VS 2013 - .net 4.5 - debug and release Works as expected. Best, John
-- Log Wizard - a Log Viewer that is easy and fun to use!
Hi, thanks for replying. I think I know what the problem is. In my actual code I set the size of the array to 10 but inserted data into only three of the elements. So my question is how do I test for null values when converting an array to a dictionary. Thanks for your help.
-
Hi, thanks for replying. I think I know what the problem is. In my actual code I set the size of the array to 10 but inserted data into only three of the elements. So my question is how do I test for null values when converting an array to a dictionary. Thanks for your help.
The most obvious solution would be to use
List<Product>
instead ofProduct[]
, and then useProducts.Add(...);
to populate the collection.List<Product> products = new List<Product>; products.Add(p1); products.Add(p2); products.Add(p3);
"Fairy tales do not tell children the dragons exist. Children already know that dragons exist. Fairy tales tell children the dragons can be killed." - G.K. Chesterton
-
Hi, thanks for replying. I think I know what the problem is. In my actual code I set the size of the array to 10 but inserted data into only three of the elements. So my question is how do I test for null values when converting an array to a dictionary. Thanks for your help.
Just add a where clause in your code like this:
Dictionary<int, Product> productlist = products.Where(b => b != null).ToDictionary(p => p.ProductSkew, p => p);
This will ignore all the null products and convert the rest into dictionary.
-
I am trying to convert an array to a dictionary but my code is throwing a null exception. Below is my code
static void Main(string\[\] args) { Product p1 = new Product(); p1.ProductSkew = 99; p1.ProductName = "Accord"; p1.Color = "Black"; p1.Price = 35000; Product p2 = new Product(); p2.ProductSkew = 46; p2.ProductName = "Corvette"; p2.Color = "Black"; p2.Price = 65000; Product p3 = new Product(); p3.ProductSkew = 35; p3.ProductName = "Altima"; p3.Color = "Black"; p3.Price = 32000; Product\[\] products = new Product\[3\]; products\[0\] = p1; products\[1\] = p2; products\[2\] = p3; Dictionary productlist = products.ToDictionary(p => p.ProductSkew, p => p); foreach (KeyValuePair item in productlist) { Product product = new Product(); product = item.Value; Console.WriteLine( "\\nSkew: {0} \\n" + "Name: {1} \\n" + "Color: {2} \\n" + "Price: {3} \\n", product.ProductSkew, product.ProductName, product.Color, product.Price ); } Console.ReadLine(); } } public class Product { public int ProductSkew { get; set; } public string ProductName { get; set; } public string Color { get; set; } public double Price { get; set; } public void AddProduct() { Console.WriteLine("Enter Product Skew."); this.ProductSkew = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter Product Name."); this.ProductName = Console.ReadLine(); Console.WriteLine("Enter Product Color."); this.Color = Console.ReadLine(); Console.WriteLine("Enter Product Price."); this.Price = Convert.ToDouble(Console.ReadLine()); } }
The syntax seems correct but when I step through the code inside of ToDictionay(), p.ProduckSkew is empty and I don't know why. Any help is greatly appreciated, thanks.
MadDashCoder wrote:
Dictionary<int, Product> productlist
Maybe it's because it's just a code sample but here you don't actually make use of the dictionary as such because you don't use its keys - a list would suffice. If it actually has to be a dictionary then I'd suggest you don't name it productlist ;)
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Just add a where clause in your code like this:
Dictionary<int, Product> productlist = products.Where(b => b != null).ToDictionary(p => p.ProductSkew, p => p);
This will ignore all the null products and convert the rest into dictionary.
Thank you Mathi, your solution works great. Also I will keep everyone else's suggestions in mind as they are all very valuable, thank you all.
-
I am trying to convert an array to a dictionary but my code is throwing a null exception. Below is my code
static void Main(string\[\] args) { Product p1 = new Product(); p1.ProductSkew = 99; p1.ProductName = "Accord"; p1.Color = "Black"; p1.Price = 35000; Product p2 = new Product(); p2.ProductSkew = 46; p2.ProductName = "Corvette"; p2.Color = "Black"; p2.Price = 65000; Product p3 = new Product(); p3.ProductSkew = 35; p3.ProductName = "Altima"; p3.Color = "Black"; p3.Price = 32000; Product\[\] products = new Product\[3\]; products\[0\] = p1; products\[1\] = p2; products\[2\] = p3; Dictionary productlist = products.ToDictionary(p => p.ProductSkew, p => p); foreach (KeyValuePair item in productlist) { Product product = new Product(); product = item.Value; Console.WriteLine( "\\nSkew: {0} \\n" + "Name: {1} \\n" + "Color: {2} \\n" + "Price: {3} \\n", product.ProductSkew, product.ProductName, product.Color, product.Price ); } Console.ReadLine(); } } public class Product { public int ProductSkew { get; set; } public string ProductName { get; set; } public string Color { get; set; } public double Price { get; set; } public void AddProduct() { Console.WriteLine("Enter Product Skew."); this.ProductSkew = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter Product Name."); this.ProductName = Console.ReadLine(); Console.WriteLine("Enter Product Color."); this.Color = Console.ReadLine(); Console.WriteLine("Enter Product Price."); this.Price = Convert.ToDouble(Console.ReadLine()); } }
The syntax seems correct but when I step through the code inside of ToDictionay(), p.ProduckSkew is empty and I don't know why. Any help is greatly appreciated, thanks.
MadDashCoder wrote:
Product product = new Product(); product = item.Value;
There's no point creating a new
Product
if you're just going to throw it away on the next line. Just use:Product product = item.Value;
MadDashCoder wrote:
ProductSkew
I think you meant to write
ProductSku
- a Stock Keeping Unit. "Skew"[^] has a totally different meaning. :)
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
I am trying to convert an array to a dictionary but my code is throwing a null exception. Below is my code
static void Main(string\[\] args) { Product p1 = new Product(); p1.ProductSkew = 99; p1.ProductName = "Accord"; p1.Color = "Black"; p1.Price = 35000; Product p2 = new Product(); p2.ProductSkew = 46; p2.ProductName = "Corvette"; p2.Color = "Black"; p2.Price = 65000; Product p3 = new Product(); p3.ProductSkew = 35; p3.ProductName = "Altima"; p3.Color = "Black"; p3.Price = 32000; Product\[\] products = new Product\[3\]; products\[0\] = p1; products\[1\] = p2; products\[2\] = p3; Dictionary productlist = products.ToDictionary(p => p.ProductSkew, p => p); foreach (KeyValuePair item in productlist) { Product product = new Product(); product = item.Value; Console.WriteLine( "\\nSkew: {0} \\n" + "Name: {1} \\n" + "Color: {2} \\n" + "Price: {3} \\n", product.ProductSkew, product.ProductName, product.Color, product.Price ); } Console.ReadLine(); } } public class Product { public int ProductSkew { get; set; } public string ProductName { get; set; } public string Color { get; set; } public double Price { get; set; } public void AddProduct() { Console.WriteLine("Enter Product Skew."); this.ProductSkew = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter Product Name."); this.ProductName = Console.ReadLine(); Console.WriteLine("Enter Product Color."); this.Color = Console.ReadLine(); Console.WriteLine("Enter Product Price."); this.Price = Convert.ToDouble(Console.ReadLine()); } }
The syntax seems correct but when I step through the code inside of ToDictionay(), p.ProduckSkew is empty and I don't know why. Any help is greatly appreciated, thanks.
The fixed size array is a nono, this is where you should use some kind of a collection, probablye the
List<Product>
Matt already suggested. But if you know beforehand you will need a Dictionary (not sure you do!) maybe you could stuff the fresh products in the dictionary right away? :) PS: yourProduct
class deserves to have a constructor that takes the basic values as parameters... PS2: ... as well as aToString()
to return a formatted representation of itself.Luc Pattyn [My Articles] Nil Volentibus Arduum