C#Extension Class在Visual Studio 2013中不起作用,适用于2015年

时间:2016-01-04 17:31:05

标签: c# visual-studio-2013 visual-studio-2015

代码的目的是允许我覆盖系统全球化的月份翻译,因为我无法直接翻译伊斯兰月份。元组列表Ext允许我用干净的语法存储外国月份的短名和长名。

My Tuple List Extension Class:

using System;
using System.Collections.Generic;
namespace Business.Extensions
{
    public static class TupleListExt
    {
        public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
            T1 item1, T2 item2)
        {
            list.Add(Tuple.Create(item1, item2));
        }
    }
}

使用此扩展程序:

using System;
using System.Collections.Generic;
using Business.Extensions;

public List<Tuple<string, string>> Months
        {
            get
            {
                return new List<Tuple<string, string>>{
                    {"",""}, // 0 index
                    {"يناير",   "يناير"}, //January, Jan
                    {"فبراير",  "فبراير"}, //Feb
                    {"مارس",    "مارس"}, // Mar
                    {"إبريل",   "إبريل"}, //April
                    {"مايو",    "مايو"}, // May
                    {"يونيو",   "يونيو"}, //June
                    {"يوليو",   "يوليو"}, //July
                    {"أغسطس",   "أغسطس"}, //Aug
                    {"سبتمبر",  "سبتمبر"}, //Sept
                    {"أكتوبر",  "أكتوبر"}, //Oct
                    {"نوفمبر",  "نوفمبر"}, //Nov
                    {"ديسمبر",  "ديسمبر"}, //Dec
                };
            }
        }

这在Visual Studio 2015中效果很好,并且代码在生产中按预期工作,但我有其他开发人员使用VS 2013与我一起工作,但它无法使用此错误构建:

  

方法“添加”没有重载需要2个参数

在2015年建成之后,2013年似乎建立得很好,但是在我再次触摸文件后它会中断。

我假设这与解析命名空间扩展类型Add有关,但我是C#的新手并且卡住了!

1 个答案:

答案 0 :(得分:3)

您的代码段使用了VS 2013中不具备的C#6功能。即,它依赖于allows implicit calls of extension method Add from collection initializers的C#编译器修复:

  

当我们第一次在C#中实现集合初始值设定项时,被调用的Add方法不能是扩展方法。 VB从一开始就做对了,但似乎我们在C#中忘记了它。这已得到修复:从集合初始值设定项生成的代码现在可以愉快地调用名为Add的扩展方法。这不是一个特色,但它偶尔会有用,而且它在新的编译器中实现它等于删除阻止它的检查。

不幸的是,解决此问题的方法是在初始化程序中明确调用Tuple.Create