Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET到C#的转换,默认参数值_C#_Default Value_Optional Parameters_Vb.net To C# - Fatal编程技术网

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

VB.NET到C#的转换,默认参数值,c#,default-value,optional-parameters,vb.net-to-c#,C#,Default Value,Optional Parameters,Vb.net To C#,我正在将一个大型VB.Net项目转换为C#。我使用了一个免费的自动工具来转换它们。VB对传入的空参数很满意,并使用方法定义中提供的默认值。 转换后,C代码中有许多调用,如下所示: GetElement(ndFirst, WAIT_AFTER_BATCH,false, , , "WAIT"); 编译器不高兴 如果我可以自动编辑C#文件(因为intellisense知道如何)以在我进行调用时填充这些默认值,有人能为我指出正确的方向吗 public void SomeMethod(int param

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

GetElement(ndFirst, WAIT_AFTER_BATCH,false, , , "WAIT");
编译器不高兴

如果我可以自动编辑C#文件(因为intellisense知道如何)以在我进行调用时填充这些默认值,有人能为我指出正确的方向吗

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

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


注意我与JetBrains或ReSharper没有任何关联。我只是这家公司的客户。

当我从VB.Net转到C#Net时,我也有过这样的经历

以下是您将要做的:

  • 首先导入
    InteropServices
    名称空间

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

  • 我修复了为公共库生成的cs文件中的编译器错误
  • 编写了一个实用程序,它检查了文件中的方法定义,并在字典中准备了方法和参数信息的目录

     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());
                }
            }
    
  • 编写了另一个方法,其中我为方法调用标记了一行,以获取方法参数(它们都是“,”分隔的)

  • 对于空参数值,我从方法字典中设置值

        for(int i = 0; i < paramValues.Length; i++)
        {
            if(  string.IsNullOrEmpty( paramValues[i].Trim()) )
            {
                paramValues[i] = currentParameterInfos[i].DefaultValue.ToString();
            }
        } 
    
    for(int i=0;i
  • 这很容易出错,但总比插入文件并手动编辑要好

  • 空参数只需使用null。您是在寻找一个遵循一般C#约定的好答案,还是仅仅是一种方法来实现这一点?我需要先让它工作起来。解决方案非常大,我需要花很长时间去编辑每个方法调用以填充默认参数。这就是我问这个问题的原因。我不能对所有空参数都使用null,例如bool参数…涉及哪个版本的Visual Studio?2010年?我正在使用VS 2010 Professional。
        for(int i = 0; i < paramValues.Length; i++)
        {
            if(  string.IsNullOrEmpty( paramValues[i].Trim()) )
            {
                paramValues[i] = currentParameterInfos[i].DefaultValue.ToString();
            }
        }