Chào mn ạ. Mn giải đáp giúp em tại sao khi dùng kiểu var cho vòng lặp foreach kết quả chạy chương trình lại khác so với dùng kiểu object với ạ? Cụ thể là ở phương thức Show(List < Product > products). Ban đầu em để foreach(var p in products) với phần comment thì chạy ra được kết quả mong muốn. Sau đó em có thay var bằng object thì kết quả chạy ra bị sai ạ.
Em cảm ơn mn nhiều ạ!!
using System;
using System.Collections.Generic;
using System.Linq;
namespace ProductManagement
{
internal class Program
{
static void Main(string[] args)
{
List<Product> products = new List<Product>();
Product.Initiallize(products);
Console.WriteLine("==================================");
Console.WriteLine("Danh sach cac san pham ");
Product.Show(products);
Console.WriteLine("==================================");
Console.WriteLine("Phan loai san pham");
Console.WriteLine("San pham co gia ca tren 500,000 VND: ");
var productsUpto500000 = products.Where(p => p.Price >= 500000);
foreach (var p in productsUpto500000)
{
Console.WriteLine(p.Name);
}
Console.WriteLine("San pham co xuat xu tu Han Quoc: ");
var productsOfKorea = from p in products where p.Origin == "Han Quoc" select p;
foreach (var p in productsOfKorea)
{
Console.WriteLine(p.Name);
}
Console.WriteLine("===================================");
Console.WriteLine("Danh sach rut gon: ");
var shortList = products.Select(
(p) =>
{
return "Ten san pham: " + p.Name + " - " + "Ma san pham: " + p.Id;
}
);
foreach (var item in shortList)
{
Console.WriteLine(item);
}
}
}
internal class Product
{
private string _name;
private string _origin;
private decimal _price;
private string _id;
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Origin
{
get { return _origin; }
set { _origin = value; }
}
public decimal Price
{
get { return _price; }
set { _price = value; }
}
public string Id
{
get { return _id; }
set { _id = value; }
}
public static List<Product> Initiallize(List<Product> products)
{
int i = 1;
while (true)
{
Console.WriteLine("San pham so " + i);
products.Add(new Product()
{
Name = null,
Origin = null,
Price = 0,
Id = null
});
Console.Write("Ten san pham: "); products[i - 1].Name = Console.ReadLine();
Console.Write("Xuat xu: "); products[i - 1].Origin = Console.ReadLine();
Console.Write("Gia san pham: "); products[i - 1].Price = decimal.Parse(Console.ReadLine());
Console.Write("Ma san pham: "); products[i - 1].Id = Console.ReadLine();
i++;
if (Console.ReadLine() == "stop") break;
}
return products;
}
public static void Show(List< Product > products)
{
int number = 1;
foreach (object p in products)
{
Console.WriteLine("San pham so " + number);
Console.WriteLine($"{ p }");
// Console.WriteLine($"Ten san pham: {p.Name}");
// Console.WriteLine($"Xuat xu: {p.Origin}");
// Console.WriteLine($"Gia thanh: {string.Format("{0:0,0}", p.Price)} VND");
// Console.WriteLine($"Ma san pham: {p.Id} \n");
number++;
}
}
}
}