VB.NET到C#的转换,默认参数值
本文关键字:默认 参数 转换 NET VB | 更新日期: 2023-09-27 18:24:14
我正在将一个大型VB.Net项目转换为C#。我使用了一个免费的自动化工具来转换它们。VB对传入的空参数很满意,并使用方法定义中提供的默认值。转换后,C#代码中有许多调用如下所示:
GetElement(ndFirst, WAIT_AFTER_BATCH,false, , , "WAIT");
编译器不高兴。。。
如果我可以在进行调用时自动编辑C#文件(因为intellisense知道如何编辑)以填充这些默认值,有人能为我指明正确的方向吗。
我假设您的方法的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并创建一个格式化程序来强制使用命名参数。然后在您的项目上运行一个简单的regex,并清除任何",,"实例
注意我与JetBrains或ReSharper没有任何关系。我只是这家公司的客户
当我从VB.Net转换到C#.Net 时,我也有过这样的经历
以下是您要做的:
-
首先导入
InteropServices
NameSpaceusing System.Runtime.InteropServices;
-
然后创建一个函数或过程,如下所示:(在我的情况下,它是一个函数)
static string ResizeImage(string imgTemp, [Optional, DefaultParameterValue(200)] int xLength) { // Do something HERE }
- 我修复了为公共库生成的cs文件中的编译器错误
-
编写了一个实用程序,该实用程序遍历文件中的方法定义,并在字典中准备了方法和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()); } }
-
写了另一个方法,我为方法调用标记一行,获取方法参数(它们都是","分开的)
-
对于空的参数值,我从我的方法字典中设置值
for(int i = 0; i < paramValues.Length; i++) { if( string.IsNullOrEmpty( paramValues[i].Trim()) ) { paramValues[i] = currentParameterInfos[i].DefaultValue.ToString(); } }
- 这很容易出错,但它比手工输入文件并进行编辑要好