该代码的目的是使我能够覆盖几个月的系统全球化翻译,因为我无法获得伊斯兰月份的直接翻译。元组列表扩展将允许我使用干净的语法存储外国月份的简称。
我的元组列表扩展类:
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与我一起工作,因此无法生成此错误:
方法'Add'的重载没有2个参数
在2015年构建之后,2013年看起来构建良好,但是在我再次触摸该文件后,它坏了。
我假设这与解决名称空间扩展类型Add有关,但是我对C#还是陌生的!
最佳答案
您的代码段利用了VS 2013中不提供的C#6功能。即,它依赖于对allows implicit calls of extension method Add
from collection initializers的C#编译器的修复:
当我们首次在C#中实现集合初始值设定项时,被调用的Add
方法不能是扩展方法。 VB从一开始就做对了,但是似乎我们在C#中却忘记了它。此问题已得到解决:从集合初始化程序生成的代码现在将愉快地调用名为Add
的扩展方法。它并不是很多功能,但是偶尔还是有用的,事实证明,在新的编译器中实现它等于删除了阻止它的检查。
不幸的是,解决此问题的方法是在初始化程序中显式调用Tuple.Create
。
关于c# - C#扩展类在Visual Studio 2013中不起作用,于2015年可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34596613/