无法识别具有泛型返回的扩展方法并导致CS1061错误

时间:2012-02-22 06:11:18

标签: generics c#-3.0 extension-methods

我尝试实现将ArrayList对象转换为List的扩展方法。我提到this

namespace MyProjects.Extensions
{
    static class ArrayListExtensions
    {
        /// <summary>
        /// ArrayList => List<T>
        /// </summary>
        /// <remarks>
        /// Based on http://www.dotnetperls.com/convert-arraylist-list
        /// </remarks>
        public static List<T> ToListCollection<T>(this ArrayList arrayList)
        {
            List<T> list = new List<T>(arrayList.Count);
            foreach (T instance in arrayList)
            {
                list.Add(instance);
            }
            return list;
        }
    }
}

当我尝试使用它时,我确保添加了using MyProjects.Extensions子句但仍然无法识别。有什么想法吗?

ArrayList arrTest = Settings.Default["ListA"] as ArrayList;
arrTest.ToListCollection<MyCustomObject>();

1 个答案:

答案 0 :(得分:5)

制作您的扩展程序集public并尝试。如果它在不同的命名空间中,则当前项目无法访问它。默认情况下,如果没有访问修饰符,则指定的类为internal

做这样的事情

namespace MyProjects.Extensions
{
    public static class ArrayListExtensions
    {
        /// <summary>
        /// ArrayList => List<T>
        /// </summary>
        /// <remarks>
        /// Based on http://www.dotnetperls.com/convert-arraylist-list
        /// </remarks>
        public static List<T> ToListCollection<T>(this ArrayList arrayList)
        {
            List<T> list = new List<T>(arrayList.Count);
            foreach (T instance in arrayList)
            {
                list.Add(instance);
            }
            return list;
        }
    }
}

详细了解Access Modifiers on MSDN

注意:引用的网站有一个演示,其中扩展类在与消费者相同的命名空间中定义。

或者,您可以使用arrayList.Cast<T>().ToList()(来自Jon Skeet'的评论)。

希望这会对你有所帮助。