具有可为空的枚举的重载不符合预期

时间:2015-02-26 19:11:55

标签: c# enums nullable overloading

我发现了一个让我有点困惑的奇怪情况。我不确定它是否只是违反了标准的最佳做法,但现在就去了。

我有一些带有一些值的枚举。

private enum Pages{ 
    Page1,
    Page2,
    Page3
}

我希望能够调用一个方法来切换页面,无论传入的页面是否为空,所以我想有一对像这样的方法可以做我想要的:

private void SwitchPage(Pages? page)
{
    if (page.HasValue)
        SwitchPage(page.Value);
}

private void SwitchPage(Pages page)
{
    // Page switch logic
}

这部分编译得很好。当我尝试使用可空的Pages变量实际调用SwitchPage()时,它似乎无法看到带有可为空的Pages参数的重载。

private void LoadDataAndMaybeSwitchPage(Pages? page)
{
    // Load data...

    // Switch Page
    SwitchPage(page);
}

这不编译,并给出这些(相关的)错误:

  

错误237最佳重载方法匹配' SwitchPage(Pages)'有一些无效的论点

     

错误238参数1:无法从'页面转换?'到'页面'

它甚至看不到可以为空的枚举的重载,只是标准的枚举。

有关为何发生这种情况的任何想法?我知道每当我想使用SwitchPage(Pages)时,我都可以轻松地使用SwitchPage(Pages?)方法中的逻辑,但我希望稍微简化代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

抱歉,当我将代码复制到一个新项目中时,我发现了一个错字。 SwithPage()!= SwitchPage()。