2

我有以下日历的 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.CalendarCalendar is an ambiguous reference between system.windows.control.calendar and system globalization.calendar.

我们如何解决这些问题?

4

2 回答 2

0

如果我理解正确,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都会使它的含义不那么清楚。

于 2018-08-20T21:50:03.407 回答
0

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

System.Globalization.Calendar originalCal = ci.Calendar;

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

using Calendar = System.Globalization.Calendar;
于 2018-08-20T21:29:51.613 回答