繁体   English   中英

将项目.net目标框架从3.5升级到4.5后,日历中的C#错误

[英]C# Error in calendar after upgrading project .net target framework from 3.5 to 4.5

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

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

我们如何解决这些家伙?

在声明对象时,您可能想要使用全限定名,如下所示:

System.Globalization.Calendar originalCal = ci.Calendar;

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

using Calendar = System.Globalization.Calendar;

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

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

为此,请删除任何引用system.windows.control.calendar import语句。

如果那是不可能的(如果您正在System.windows.control下使用其他功能,那么Calendar会隐式包含在内),然后为system.globalization命名空间声明一个别名

using glob = System.Globalization;

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

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

PS:如果愿意,您可以将其缩短得更多,但是就我个人而言,我认为任何比glob短的内容都会使它的含义变得不清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM