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

Nap*_*Nap 1 generics extension-methods c#-3.0

我试图实现将ArrayList对象转换为List的扩展方法.我提到了这个.

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时,我确保我添加了一个using MyProjects.Extensions条款,但它仍然无法识别.有任何想法吗?

ArrayList arrTest = Settings.Default["ListA"] as ArrayList;
arrTest.ToListCollection<MyCustomObject>();
Run Code Online (Sandbox Code Playgroud)

Ama*_*ure 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读有关MSDN上的访问修饰符的更多信息.

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

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

希望这对你有所帮助.