如何使用分割产品数组字符串,并在字典或列表中保存键值对。 cookie中的字符串是:
cookieValue ="12&150&pid=1,name=abc,size=2gm Sachet,price=50,image=Pouch.jpg,quantity=1&pid=2,name=xyz,size=200gm Packet,price=50,image=small.jpg,quantity=2"
产品数组如下:
[0] "12"
[1] "150"
[2] "pid=1,name=abc,size=2gm Sachet,price=50,image=Pouch.jpg,quantity=1"
[3] "pid=2,name=xyz,size=200gm Packet,price=50,image=small.jpg,quantity=2"
处理cookie的代码:
if(HttpContext.Request.Cookies["Cart"]!= null)
{
var cookieValue = Request.Cookies["Cart"].Value;
string[] products = cookieValue.Split('&');
var len = products.Length;
for(int x=2;x<=len;x++)
{
string s1 = products[x];
}
}
答案 0 :(得分:0)
在您的示例中,将输入字符串拆分为&amp;生成一个包含4个元素的数组,因此假设此数组的前半部分表示要跳过的内容,后半部分是产品本身,其中 pid 字段用作KeyValuePair的键结构,您可以用这种方式在Dictionary<int, Product>
中转换该字符串
public class Product
{
public int ID {get;set;}
public string Name {get;set;}
public string Size {get;set;}
public decimal Price {get;set;}
public string Image {get;set;}
public int Quantity {get;set;}
}
Dictionary<int, Product> dicProducts = new Dictionary<int, Product>();
string[] products = cookieValue.Split('&');
var len = products.Length;
int half = len / 2;
for(int x=half;x<len;x++)
{
string[] productData = products[x].Split(',');
Product p = new Product()
{
ID = Convert.ToInt32(productData[0]);
Name = productData[1];
Size = productData[2];
Price = Convert.ToDecimal(productData[3]);
Image = productData[4];
Quantity = Convert.ToInt32(productData[5]);
}
dicProducts.Add(p.ID, p);
}
这是一个非常简单的代码来遍历输入数据,我没有对输入数据进行任何检查,以免使代码过于复杂。在现实世界的应用程序场景中,您应该添加大量检查。例如,输入数据应该完全被2整除,应检查产品部分中的字符串的完整性和有效性。
答案 1 :(得分:0)
希望这有帮助。
您不能使用字典,因为有重复的键。但是你可以使用List of KeyValuePairs。
var products = cookieValue.Split('&');
var keyValueList = new List<KeyValuePair<string, string>>();
foreach (var product in products)
{
var sequence = product.Split(',').ToList();
var isValidSequence = sequence.Count > 1;
if (!isValidSequence) continue;
sequence.ForEach(s =>
keyValueList.Add(new KeyValuePair<string, string>(s.Split('=')[0], s.Split('=')[1]))
);
}