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

我有以下用于日历的 buildculture 功能:


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.


我们如何解决这些家伙?


回首忆惘然
浏览 279回答 2
2回答

慕盖茨4494581

如果我理解正确,system.globalization.calendar这可能是您想要使用的,因为您似乎正在使用日期格式。system.windows.control.calendar不包含日历数据,而是一个日历控件- 呈现为日历的图形。为此,请删除任何import引用system.windows.control.calendar.如果这是不可能的(如果您在 下使用其他内容System.windows.control,因此Calendar会被隐式包含),则为命名空间声明一个别名system.globalization:using glob = System.Globalization;这定义glob为 namespace 的缩写System.Globalization,这将允许您引用正确的 Calendar 类,如下所示:var ci = new glob.CultureInfo(culture); glob.Calendar myCal = ci.Calendar;PS:如果你愿意,你可以把它缩短得更短,但就个人而言,我认为任何比glob它更短的东西都会让它的意思不那么清楚。

绝地无双

在声明对象时,您可能希望使用完全限定名称,如下所示:System.Globalization.Calendar originalCal = ci.Calendar;或者,如果你知道你不使用的System.Windows.Control.Calendar类型,你可以别名类型Calendar的一个中System.Globalization有以下using:using Calendar = System.Globalization.Calendar;
打开App,查看更多内容
随时随地看视频慕课网APP