该代码的目的是使我能够覆盖几个月的系统全球化翻译,因为我无法获得伊斯兰月份的直接翻译。元组列表扩展将允许我使用干净的语法存储外国月份的简称。

我的元组列表扩展类:

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/

10-16 08:59
查看更多