代码的目的是允许我覆盖系统全球化的月份翻译,因为我无法直接翻译伊斯兰月份。元组列表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#的新手并且卡住了!
答案 0 :(得分:3)
您的代码段使用了VS 2013中不具备的C#6功能。即,它依赖于allows implicit calls of extension method Add
from collection initializers的C#编译器修复:
当我们第一次在C#中实现集合初始值设定项时,被调用的
Add
方法不能是扩展方法。 VB从一开始就做对了,但似乎我们在C#中忘记了它。这已得到修复:从集合初始值设定项生成的代码现在可以愉快地调用名为Add
的扩展方法。这不是一个特色,但它偶尔会有用,而且它在新的编译器中实现它等于删除阻止它的检查。
不幸的是,解决此问题的方法是在初始化程序中明确调用Tuple.Create
。