---
title: "Översätta från vb.net till c#"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/160086-översätta-från-vb-net-till-c"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "MagnusJ"
published: "2007-05-09T12:17:51.000Z"
updated: "2007-05-09T20:13:30.000Z"
replies: 8
views: 435
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/160086-översätta-från-vb-net-till-c"
---

# Översätta från vb.net till c#

## #1 — MagnusJ, 2007-05-09T12:17Z

Tjena,

Jag har följt den här guiden till hur man göra en kundvagn: <http://www.sitepoint.com/article/net-shopping-cart-datatables> men den är skriven i vb.net och jag håller på med c#. Så nu har jag försökt översätta det hela, men har stött på lite problem. Jag har använt mig av en generator som jag hittade på en hemsida. 

Jag funderar lite över hur den här koden blev genererad: 

```php
        foreach (int objDR in objDT.Rows)
        {
            if (objDR["Product"] == Product)
            {
                objDR["Quantity"] += txtQuantity.Text;
                blnMatch = true;
                goto exitForStatement0;
            }
        }
    exitForStatement0: ;
        if (!(blnMatch))
        {
            objDR = objDT.NewRow();
            objDR["Quantity"] = txtQuantity.Text;
            objDR["Product"] = ddlProducts.SelectedItem.Text;
            objDR["Cost"] = decimal.Parse(ddlProducts.SelectedItem.Value);
            objDT.Rows.Add(objDR);
        }
```

Generatorn la till gotoExitForStatement0 och det. Behövs det för att kunna köra foreach-satsen? Det är även två fel där som jag inte lyckades lösa. 

Det är det här:

```php
 if (objDR["Product"] == Product)
 
objDR["Quantity"] += txtQuantity.Text;
```

Där felmeddelandet är Cannot apply indexing with \[\] to an expression of type 'int'.

Det sista felet är:

```php
decRunningTotal += (objDR["Cost"] * objDR["Quantity"]);
```

Felmeddelandet:
Operator '\*' cannot be applied to operands of type 'object' and 'object'

Vet någon hur man kan lösa det här?

edit: löste första felet så jag tog bort det.

Permalänk: https://www.webforum.nu/p/160086

## #2 — headbug, 2007-05-09T12:28Z

Jo, när du skapar objDT så får den typen "object" vilket är C# sätt att tala om att man inte vet vilken typ man fått, så du måste göra en cast, och det gör man enklast genom att skriva

```
objDT = (System.Data.DataTable)Session["Cart"];
```

och på motsvarande ställen där du får problem med typen object

De andra problemen kanske också löser sig?

Permalänk: https://www.webforum.nu/p/1973133

## #3 — erka, 2007-05-09T12:29Z

Är decRunningTotal en itn isf.

(int.parse(objDR\["Cost"\].ToString()) \* int.parse(objDR\["Quantity"\].ToString()));

Det är ju en datarow-object så du måste casta när du gör operationer

Permalänk: https://www.webforum.nu/p/1973134

## #4 — headbug, 2007-05-09T12:33Z

> **MagnusJ skrev:**
>
> ```
> foreach (int objDR in objDT.Rows)
> ```
>
> 
> 
> 
> Där felmeddelandet är Cannot apply indexing with \[\] to an expression of type 'int'.

en int är en int och int\[\] är en vektor så för att kunna indexera så måste du skriva

```
foreach (int[] objDR in objDT.Rows)
```

....tror jag :) Är inte en stjärna på C# ännu!

Permalänk: https://www.webforum.nu/p/1973136

## #5 — emission, 2007-05-09T12:42Z

Eftersom objDT är en DataTable så är det

```
foreach(DataRow objDR in objDT.Rows)
```

Goto-satsen ska du ersätta med "break"

Permalänk: https://www.webforum.nu/p/1973141

## #6 — MagnusJ, 2007-05-09T12:53Z

> **headbug skrev:**
>
> Jo, när du skapar objDT så får den typen "object" vilket är C# sätt att tala om att man inte vet vilken typ man fått, så du måste göra en cast, och det gör man enklast genom att skriva
> 
>
>
> ```
> objDT = (System.Data.DataTable)Session["Cart"];
> ```
>
> 
> 
> och på motsvarande ställen där du får problem med typen object
> 
> De andra problemen kanske också löser sig?

Aha okej, jag löste det genom att skriva objDT = Session\["Cart"\] as DataTable; Vilket sätt är bäst?

Tack för hjälpen, nu har jag fått bort alla felmeddelanden från koden. 

Nu får jag dock ett problem med en annan grej. 

När jag försöker lägga till en sak i kundvagen får jag problem med den här koden:
objDR\["Cost"\] = decimal.Parse(ddlProducts.SelectedItem.Value);
Input string was not in a correct format.

Hur får man till det?

Edit: jag provade att byta ut den där strängen mot en fast summa bara för att se om resten fungerade. Allting fungerar förutom en grej, det är när man lägger till en produkt som man redan har så utökas det så här
Om jag har en socka i kundvagnen och lägger till en socka så blir det inte 1+1 =2 utan det blir 11.

Permalänk: https://www.webforum.nu/p/1973144

## #7 — ordell, 2007-05-09T17:45Z

Orkar inte läsa igenom allt, men jag tänkte kommentera sättet att casta objekt.

objDT = (DataTable)Session\["Cart"\] kastar ett fel om objektet INTE är DataTable.

objDT = Session\["Cart"\] as DataTable är bättre eftersom objDT kommer bli null om sessionvariabeln inte är DataTable.

is är ett annat bra keyword när man jobbar med sessionsvariabler. if (Session\["Cart"\] is DataTable) { objDT = Session\["Cart"\] as DataTable; }

Bara en kommentar ;)

Permalänk: https://www.webforum.nu/p/1973222

## #8 — MagnusJ, 2007-05-09T19:50Z

Aha, finns det något bra sätt att kolla om en Session är null? Nu kör jag if(Session\["Cart"\] == null) finns det något bättre som man ska använda när det gäller sessions?

Permalänk: https://www.webforum.nu/p/1973279

## #9 — Zaiman, 2007-05-09T20:13Z

Kanske

```
if(String.IsNullOrEmpty(Session["Cart"]))
```

Permalänk: https://www.webforum.nu/p/1973296

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/160086-översätta-från-vb-net-till-c
