PHP til c#.NET/ASP.NET


Forum --> ASP.NET

Author Comment
Erik Skagen Vindenes
PHP til c#.NET/ASP.NET 09.09.2009 12:46:50
Hei, jeg kom over en problemsilig i c#,
hvordan skriver man dette i c#? Kan man bruke Dictionary til dette?


$count = 0;
if(count($_SESSION['goods']) > 0) {
   $count = count($_SESSION['goods']) -1; // array start on zero.
}

$_SESSION['goods'][$count]["products_id"] = $_POST["products_id"];
$_SESSION['goods'][$count]["price"] = $_POST["price"];
$_SESSION['goods'][$count]["number"] = $_POST["number"];
Torbjørn Marø
RE:PHP til c#.NET/ASP.NET 14.09.2009 07:44:01

Heisann, Erik.

Jeg har begynt på fire forskjellige svar på dette spørsmålet, før jeg endelig bestemte meg for å faktisk gjøre hva jeg kan for å svare på spørsmålet Smiley Så hvis du fortsatt er interessert...

Ja, du kan bruke en Dictionary. Plasserer du f.eks. en Dictionary<string, string> i Session under nøkkelen "goods", vil du kunne skrive kode som den du postet også i C#. Noe sånt som:

Session["goods"] = Array.CreateInstance(typeof(Dictionary<string, string>), 100);
// opprette Dict-instansene når du trenger dem..

// senere...

var goodsArray = Session["goods"] as Dictionary<string, string>[];
goodsArray[someIndex]["products_id"] = Request["products_id"];
goodsArray[someIndex]["price"] = Request["price"];

Vakkert er det dog ikke. Og pass på IndexOutOfBoundsException og NullReferenceException om du prøver på noe sånn som dette.

Anbefaler at du heller lager deg noen gode abstraksjoner for hva du egentlig holder på med... Hva med en Product klasse, ProductCollection osv..?

Erik Skagen Vindenes
RE:PHP til c#.NET/ASP.NET 19.09.2009 04:10:13
Tusen takk!
Fant en løsing på det før dette innlegget ditt.


[Serializable]
public class Product
{
  public int ProductId{get;set;}
  public int Price{get;set;}
  public int Number{get;set;}
}




public void AddProductToSession(Product product)
{
  var products = Session["goods"] as Dictionary<int, Product>;
  if (products == null) products = new Dictionary<int, Product>();
  products.Add(product.ProductId, product);
  Session["goods"] = product;
}

public Product GetProductFromSession(int productId)
{
  Product product;
  var products = Session["goods"] as Dictionary<int, Product>;
  if (products == null || !products.TryGetValue(productId, out product))
    throw Exception(string.Format("Product {0} not in session", productId));
  return product;
}

Torbjørn Marø
RE:PHP til c#.NET/ASP.NET 19.09.2009 10:12:23

Ja, den løsningen er grei. Jeg ville ha separert bort bruken av Session, bl.a. for å fjerne kodeduplisering. Noe sånt som dette kanskje:

private const string goods = "goods";

private Dictionary SessionProducts
{
   get 
   {      
      if(Session[goods] == null)
         return new Dictionary();
      return Session[goods] as Dictionary;
   }
   set
   {
      Session[goods] = value;
   }
}

public void AddProductToSession(Product product)
{
  var products = SessionProducts;
  products.Add(product.ProductId, product);
  SessionProducts = product;
}

public Product GetProductFromSession(int productId)
{
  var products = SessionProducts;
  if(!products.ContainsKey(productId)
     throw Exception(string.Format("Product {0} not in session", productId));  
  return products[productId];
}


Torbjørn Marø
RE:PHP til c#.NET/ASP.NET 19.09.2009 10:14:01

Generics-taggene forsvant i koden min over, men du skjønner sikkert hva jeg mente likevel... Smiley


Copyright (C) 2006 Norwegian .NET User Group
  Powered by EPiServer