'double.TryParse(string,out double)'的最佳重载方法匹配有一些无效的参数

时间:2016-08-08 20:57:02

标签: c# vb.net

我进行了搜索,但未找到问题的答案。如果已经被问过,我会很感激帮助找到它。

我对编码有点新意,我正在尝试将程序从VB转换为C#。

这是原始的VB代码:

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

以下是我将其转换为C#代码所做的工作:

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} 

在C#代码的第10行,我收到错误:

  

'double.TryParse(string,out double)'的最佳重载方法匹配有一些无效的参数

这对我来说没有意义,因为参数是正确的类型(字符串和双精度)。它们是否以其他方式无效?

2 个答案:

答案 0 :(得分:2)

doubleParam是一个out参数,所以你应该明确告诉它:

double.TryParse(quantityparamstring, out quantityparam);

答案 1 :(得分:1)

使用out关键字

将该行更改为下方
double.TryParse(quantityparamstring, out quantityparam);