VB.NET转C#转换,默认参数值

时间:2012-02-11 22:27:41

标签: c# default-value optional-parameters vb.net-to-c#

我正在将一个大型VB.Net项目转换为C#。我使用免费的自动化工具来转换它们。 VB对传入的空参数感到满意,并使用方法定义中提供的默认值。 转换后,C#代码中有很多调用如下所示:

GetElement(ndFirst, WAIT_AFTER_BATCH,false, , , "WAIT");

编译器不满意......

如果我可以自动编辑C#文件(因为intellisense知道如何)在我打电话时填写这些默认值,有人能指出我正确的方向。

3 个答案:

答案 0 :(得分:0)

我假设您的方法的C#版本具有正确指定的默认参数,例如

public void SomeMethod(int paramA = 0, int paramB = 1, int paramC = 2){
   ...
}

如果要调用方法并接受paramB的默认值(如示例所示),则需要命名参数

SomeMethod(paramA: 12, paramC: 20);

这将收集paramA和paramC的值,同时使用paramB的默认值。

此外,由于paramA位于正确的位置,这也是正确的

SomeMethod(12, paramC: 20);

或者,如果你想要遗漏的参数是最后一个,你可以简单地把它留下来并像这样调用你的方法

SomeMethod(12,20);

其中paramA = 12,paramB = 20,paramC将使用默认值2。

不幸的是,我不知道自动解决这些问题的方法。同样,为了加快速度,您可以使用ReSharper并创建格式化程序以强制使用命名参数。然后在项目上运行一个简单的正则表达式并清除',,'

的任何实例

注意 我与JetBrains或ReSharper无关。我只是这家公司的客户。

答案 1 :(得分:0)

当我从VB.Net转移到C#.Net

时,我也有经验

以下是您要做的事情:

  1. 首先导入InteropServices NameSpace

    using System.Runtime.InteropServices;
    
  2. 然后创建一个如下所示的函数或过程:(在我的例子中,它是一个函数)

    static string ResizeImage(string imgTemp,
                              [Optional, DefaultParameterValue(200)] int xLength)
    {
       // Do something HERE
    }
    

答案 2 :(得分:0)

  1. 我修复了公共库
  2. 生成的cs文件中的编译器错误
  3. 编写了一个遍历文件中方法定义的实用程序,并在字典中准备了方法目录和ParamterInfos。

     var methodInfos = type.GetMethods(BindingFlags.Public | BindingFlags.Static);
            //this is not exact for methods with different signatures.
            foreach (var methodInfo in methodInfos)
            {
                if(!methodCatalog.ContainsKey(methodInfo.Name)) 
                    methodCatalog.Add(methodInfo.Name, methodInfo.GetParameters());
                else
                {
    
                    methodCatalog.Add(methodInfo.Name + "__" + Guid.NewGuid() , methodInfo.GetParameters());
                }
            }
    
  4. 写了另一种方法,我为方法调用标记了一行获取方法参数(它们都是“,”分开)

  5. 对于空参数值,我设置了我的方法字典

    中的值
        for(int i = 0; i < paramValues.Length; i++)
        {
            if(  string.IsNullOrEmpty( paramValues[i].Trim()) )
            {
                paramValues[i] = currentParameterInfos[i].DefaultValue.ToString();
            }
        } 
    
  6. 这很容易出错,但它比文件中的goin和手工编辑更好。