2016-08-08 9 views
-1

Ich habe eine Suche durchgeführt und keine Antwort auf meine Frage gefunden. Wenn es bereits gefragt wird, würde ich mich freuen, es zu finden.Die beste überladene Methodenübereinstimmung für 'double.TryParse (string, out double)' hat einige ungültige Argumente

Ich bin ein bisschen neu in der Codierung und ich versuche, ein Programm von VB zu C# zu konvertieren.

Dies ist der ursprüngliche VB-Code:

For Each grpkey In groups.Keys.ToArray 
    Dim grp = groups(grpkey) 
    If grp.SmartKitParameters.Count > 0 Then 
    Dim partnameparam = GetParameterValue(grp.SmartKitParameters, "%SMARTKITNAME%", "") 
    Dim maintcodeparam = GetParameterValue(grp.SmartKitParameters, "%MAINTCODE%", "P") 
    Dim divisioncodeparam = GetParameterValue(grp.SmartKitParameters, "%DIVISIONCODE%", "W") 
    Dim quantityparam As Double 
    Double.TryParse(GetParameterValue(grp.SmartKitParameters, "%QUANTITY%", "0"), quantityparam) 
    Dim smkt As New Part With 
    { 
     .PartID = allparts.Values.Max(Function(p) p.PartID) + 1, 
     .DPLType = grp.Parts.Values.First.DPLType, 
     .Plane = grp.Parts.Values.First.Plane, 
     .Quantity = quantityparam, 
     .MaintCode = maintcodeparam, 
     .PartNumber = partnameparam, 
     .Plant = divisioncodeparam, 
    } 
    Dim parentgrp = GetGroup(groups, smkt.DPLType, smkt.Plane, "(Default Group)") 
    parentgrp.Parts.Add(smkt.PartID, smkt) 

    allparts.Add(smkt.PartID, smkt) 

    groups.Remove(grpkey) 
    End If 

    Using specdimscmd As New OleDbCommand("Select * From DPLSpecialDimensions;", conn) 
    Using rdr = specdimscmd.ExecuteReader 
     While rdr.Read 
     Dim partid = rdr.GetInteger("PartID", 0) 
     If allparts.ContainsKey(partid) Then 
       allparts(partid).SpecialDimensions.Add(New SpecialDimension With 
       { 
       .PartID = partid, 
       .SpecDimID = rdr.GetInteger("SpecDimID", 0), 
       .MaintCode = rdr.GetString("MaintCode", ""), 
       .SpecialType = rdr.GetString("SpecialType", ""), 
       .SpecialDim = rdr.GetSingle("SpecialDim", 0.0) 
       }) 
     End If 
     End While 
    End Using 
    End Using 
Next 

Hier ist, was ich habe diesen Code in C# konvertieren getan:

1 foreach (string grpkey_loopVariable in groups.Keys.ToArray) 
2 { 
3 if (grp.SmartKitParameters.Count > 0) 
4 { 
5  string partnameparam = GetParameterValue(grp.SmartKitParameters, "%SMARTKITNAME%", ""); 
6  string maintcodeparam = GetParameterValue(grp.SmartKitParameters, "%MAINTCODE%", "P"); 
7  string divisioncodeparam = GetParameterValue(grp.SmartKitParameters, "%DIVISIONCODE%", "W"); 
8  double quantityparam = 0; 
9  string quantityparamstring = GetParameterValue(grp.SmartKitParameters, "%QUANTITY%", "0.0"); 
10  double.TryParse(quantityparamstring, quantityparam); 
11 
12  Part smkt = new Part 
13  { 
14  PartID = allparts.Values.Max(p => p.PartID) + 1, 
15  DPLType = grp.Parts.Values.First().DPLType, 
16  Plane = grp.Parts.Values.First().Plane, 
17  Quantity = quantityparam, 
18  MaintCode = maintcodeparam, 
19  PartNumber = partnameparam, 
20  Plant = divisioncodeparam, 
21  }; 
22 
23 dynamic parentgrp = GetGroup(groups, smkt.DPLType, smkt.Plane, "(Default Group)"); 
24 parentgrp.Parts.Add(smkt.PartID, smkt); 
25 
26 allparts.Add(smkt.PartID, smkt); 
27 
28 groups.Remove(grpkey); 
29 } 
30 
31 using (OleDbCommand specdimscmd = new OleDbCommand("Select * From DPLSpecialDimensions;", conn)) 
32 { 
33 using (OleDbDataReader rdr = specdimscmd.ExecuteReader()) 
34 { 
35  while (rdr.Read()) 
36  { 
37  dynamic partid = GetInteger(rdr as IDataReader, "PartID", 0); 
38  if (allparts.ContainsKey(partid)) 
39  { 
40   allparts[partid].SpecialDimensions.Add(new SpecialDimension 
41   { 
42   PartID = partid, 
43   SpecDimID = GetInteger(rdr as IDataReader, "SpecDimID", 0), 
44   MaintCode = GetString(rdr as IDataReader, "MaintCode", ""), 
45   SpecialType = GetString(rdr as IDataReader, "SpecialType", ""), 
46   SpecialDim = GetSingle(rdr as IDataReader, "SpecialDim", 0) 
47   }); 
48  } 
49  } 
50 } 
51 } 
52} 

in Zeile 10 in dem C# -Code, erhalte ich der Fehler:

Das macht für mich keinen Sinn, da die Argumente der richtige Typ (String und Double) sind. Sind sie auf andere Weise ungültige Argumente?

+1

Sie müssen die 'Bereich führt zum Schlüsselwort –

Antwort

2

doubleParam ist ein out Parameter, so sollten Sie es explictly so sagen:

double.TryParse(quantityparamstring, out quantityparam); 
+0

Danke ! Ich wusste, dass es etwas Einfaches sein musste. –

+1

Beachten Sie, dass 'double.TryParse' ein bool zurückgibt, true, wenn erfolgreich (und der out-Parameter ist nützlich), false, wenn nicht. Ich weiß nicht, ob Ihr Code sicherstellt, dass es sich um ein korrekt formatiertes Double handelt, aber wenn dies nicht der Fall ist, sollten Sie es möglicherweise modifizieren, um diesen Rückgabewert zu verwenden. – Cody

1

ändern, die unter Verwendung des out Schlüsselwort Zeile zu

double.TryParse(quantityparamstring, out quantityparam); 
+0

Danke! Ich wusste, dass es etwas Einfaches sein musste. –

+0

@AmmonNelson, in Ordnung, aber Sie sollten Dokumentation immer dann verweisen, wenn solche Verwirrung auftritt. – Rahul

+0

Ich bin nicht sicher, was Sie mit "Verweis Dokumentation" meinen, bitte klären. –