是否可以创建2个具有相同方法名称的方法,使用条件属性传递值并返回,例如
[Conditional("Debug")]
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
guidString = guidString.Replace("=", "");
guidString = guidString.Replace("+", "");
return guidString;
}
[!Conditional("Debug")]// I know using '!' doesn't really work
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
return guidString;
}
这样你就可以调用一个方法并根据是否定义了“Debug”,编译器会选择哪种方法?
由于
答案 0 :(得分:3)
不,这是不可能的。 Conditional
属性不控制是否在代码中定义方法,它只控制方法调用包含在调用代码中的条件。
此外,Conditional
属性可以多次应用于方法。因此,这里没有简单的on / off
决定。考虑
[Conditional("DEBUG")]
[Conditional("TRACE")]
void Target() { ... }
这里有4种组合需要考虑,而不仅仅是2.
答案 1 :(得分:3)
您可以尝试使用#if DEBUG
语法,如下所示:
#if DEBUG
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
guidString = guidString.Replace("=", "");
guidString = guidString.Replace("+", "");
return guidString;
}
#else
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
return guidString;
}
#endif
然而,使用它存在一些差异。有关详细信息,请参阅this question。
答案 2 :(得分:1)
您不能拥有多个具有相同名称和相同签名的功能/方法。但是,您可以通过更改其签名来重载方法。例如:
Private Function myMethod() As String
Return "D"
End Function
Private Function myMethod(ByVal myString As String) As String
Return "D"
End Function
相反,尝试创建完全相同的函数,即执行两个不同的操作,最好传入一个变量,并根据值执行两个不同的操作。
Private Function myFunction(ByVal test As String) As String
if(test.toUpper()= "QA") then
'do one thing
elseif(test.toUpper() = "LOCAL"
'do another
else
'must be Prod
end if
end Sub
通常我所做的是在我的web.config文件中有一个键,表示我正在使用的环境(Local,QA,Prod),并且根据该值,我会将不同的参数传递给我的函数/方法。然后,当我发布时,我更改了Web配置密钥