5

是否可以创建 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;
    } 

这样您就可以调用一个方法并根据是否定义了“调试”,编译器将选择哪种方法?

谢谢

4

3 回答 3

4

不,这是不可能的。该Conditional属性不控制方法是否在代码中定义,它只控制方法调用包含在调用代码中的条件。

此外,该Conditional属性可以多次应用于方法。因此,这里没有一个简单的on / off决定。考虑

[Conditional("DEBUG")]
[Conditional("TRACE")]
void Target() { ... }

这里有 4 种组合需要考虑,而不仅仅是 2 种。

于 2013-03-04T17:01:25.997 回答
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 

但是,使用它有一些不同之处。有关更多详细信息,请参阅此问题

于 2013-03-04T17:03:05.007 回答
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 文件中有一个键,它表示我正在使用的环境(本地、QA、Prod),并且根据该值,我会将不同的参数传递给我的函数/方法。然后,当我发布时,我更改了网络配置密钥

于 2013-03-04T17:05:47.370 回答