VB.NET到C#的转换,默认参数值
我正在将一个大型VB.Net项目转换为C#。我使用了一个免费的自动工具来转换它们。VB对传入的空参数很满意,并使用方法定义中提供的默认值。 转换后,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
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;
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();
}
}