我正在将一个大型VB.Net项目转换为C#。我使用免费的自动化工具来转换它们。 VB对传入的空参数感到满意,并使用方法定义中提供的默认值。 转换后,C#代码中有很多调用如下所示:
GetElement(ndFirst, WAIT_AFTER_BATCH,false, , , "WAIT");
编译器不满意......
如果我可以自动编辑C#文件(因为intellisense知道如何)在我打电话时填写这些默认值,有人能指出我正确的方向。
答案 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
时,我也有经验以下是您要做的事情:
首先导入InteropServices
NameSpace
using System.Runtime.InteropServices;
然后创建一个如下所示的函数或过程:(在我的例子中,它是一个函数)
static string ResizeImage(string imgTemp,
[Optional, DefaultParameterValue(200)] int xLength)
{
// Do something HERE
}
答案 2 :(得分:0)
编写了一个遍历文件中方法定义的实用程序,并在字典中准备了方法目录和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();
}
}