【问题标题】:C# Error in calendar after upgrading project .net target framework from 3.5 to 4.5将项目 .net 目标框架从 3.5 升级到 4.5 后日历中的 C# 错误
【发布时间】:2018-08-20 21:21:34
【问题描述】:

我有以下日历的构建文化功能:

private void buildCulture(string culture, string calendarType)
{

    CultureInfo ci=null;
    try
    {
        if (string.IsNullOrEmpty(culture))
        {
            ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        }
        else
        {
            try
            {
                ci = new CultureInfo(culture);
            }
            catch (System.ArgumentException)
            {
                ci = System.Threading.Thread.CurrentThread.CurrentCulture;
            }
        }

        // Calendar is from system.windows.control.calendar, 
        // ci is from system.globalization.calendar:
        Calendar originalCal = ci.Calendar;

        if (!string.IsNullOrEmpty(culture) || 
             originalCal.ToString().Replace("System.Globalization.", "") != culture)
        {
            foreach (Calendar supportCal in ci.OptionalCalendars)
            {
                if (calendarType == 
                      supportCal.ToString().Replace("System.Globalization.", ""))
                {
                    ci.DateTimeFormat.Calendar = supportCal;
                }
            }
        }
    }
}

此功能在 .net 3.5 版中仍然有效。但是在我升级到 .net 4.5 后,Calendar originalCal = ci.Calendar 行出现错误:Calendar is an ambiguous reference between system.windows.control.calendar and system globalization.calendar

我们如何解决这些问题?

【问题讨论】:

    标签: c# .net calendar ambiguous ambiguous-call


    【解决方案1】:

    您可能希望在声明对象时使用完全限定名称,如下所示:

    System.Globalization.Calendar originalCal = ci.Calendar;
    

    或者,如果您知道您没有使用 System.Windows.Control.Calendar 类型,您可以使用以下 using 将类型 Calendar 别名为 System.Globalization 中的类型:

    using Calendar = System.Globalization.Calendar;
    

    【讨论】:

    • 我不确定要使用哪个类。 system.windows.control.calendar 和 system.globalization.calendar 有什么区别吗?
    • @Coolguy 有。在这种情况下,您肯定使用System.Globalization.Calendar。问题是您是否还在应用程序中使用System.Windows.Control.Calendar 控件。如果是,那么using Calendar = System.Globalization.Calendar 会导致不同的编译错误,说明没有从System.Windows.Control.CalendarSystem.Globalization.Calendar 的隐式转换
    【解决方案2】:

    如果我理解正确,system.globalization.calendar 可能是您想要使用的,因为您似乎正在使用日期格式。

    system.windows.control.calendar 不包含日历数据,而是一个日历控件 - 即呈现为日历的图形。

    要实现此目的,请删除任何引用 system.windows.control.calendarimport 语句。

    如果这是不可能的(如果你在 System.windows.control 下使用其他东西,所以 Calendar 被隐式包含),然后为 system.globalization 命名空间声明一个 别名: p>

    using glob = System.Globalization;
    

    这将glob 定义为命名空间System.Globalization 的缩写,这将允许您引用正确的Calendar 类,如下所示:

    var ci = new glob.CultureInfo(culture);
    glob.Calendar myCal = ci.Calendar;
    

    PS:如果你愿意,你可以把它缩短得更多,但我个人认为,任何短于 glob 的东西都会使其含义不那么清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多