Code Bye

c# LINQ 查询返回的类型问题

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Trade_Test
{
 
    public class TEST_LIST
    {
        public int id { get; set; }
        public string name { get; set; }
    }
 
    public class TEST_Collection<T> : System.Collections.ObjectModel.ObservableCollection<T>
    {
        private int a_MaxCount = 0;
        /// <summary>
        /// 数组的最大值,超过这个值,就会删除第一条记录
        /// </summary>
        public int s_MaxCount
        {
            get { return a_MaxCount; }
            set { a_MaxCount = value; }
        }
 
        public TEST_Collection()
        {
            base.CollectionChanged += TEST_Collection_CollectionChanged;
        }
 
        private void TEST_Collection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null)
            {
                if (Count > a_MaxCount) { RemoveAt(0); }
            }
        }
    }
 
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
 
            TEST_Collection<TEST_LIST> l_list = new TEST_Collection<TEST_LIST>();
            l_list.s_MaxCount = 5;
            l_list.Add(new TEST_LIST { id = 1, name = "11" });
            l_list.Add(new TEST_LIST { id = 2, name = "22" });
            l_list.Add(new TEST_LIST { id = 3, name = "33" });
            l_list.Add(new TEST_LIST { id = 4, name = "44" });
            l_list.Add(new TEST_LIST { id = 5, name = "55" });
            l_list.Add(new TEST_LIST { id = 6, name = "66" });
            l_list.Add(new TEST_LIST { id = 7, name = "77" });
 
            TEST_Collection<TEST_LIST> l_temp = l_list.Where(p => p.id > 5);
 
        }
    }
}

错误 CS0266 无法将类型“System.Collections.Generic.IEnumerable<Trade_Test.TEST_LIST>”隐式转换为“Trade_Test.TEST_Collection<Trade_Test.TEST_LIST>”。存在一个显式转换(能否缺少强制转换?)

本人想说的是, l_list.Where 查询出来的数据类型为什么就不是 TEST_Collection<TEST_LIST> 了,这个要怎么解决?

解决方案

10

本来就不是。
你把 Linq 的教程多看几遍。

10

你当初怎么创建 l_list 的,你就可以还是那样创建 l_temp。关键地不在这里,关键在于你本人要知道原因。

10

为什么 要是TEST_Collection<TEST_LIST> ?
linq返回的都是IEnumerable<TSource>好不

10

TEST_Collection<TEST_LIST> l_temp = new TEST_Collection<TEST_LIST>(l_list.Where(p => p.id > 5));

10

List<TEST_LIST> l_temp = l_list.Where(p => p.id > 5).ToList();

10

TEST_Collection<TEST_LIST> l_temp = l_list.Where(p => p.id > 5).ToList;();
http://www.wuleba.com/26727.html/comment-page-1
题主可以下载一个,代码有啥问题这个工具有提示,并且会帮你把错误改掉

10

I believe the error message can help you to fix this issue

10

List<TEST_LIST> l_temp = l_list.Where(p => p.id > 5).ToList<TEST_LIST>();

20

用var类型接收不就可以了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# LINQ 查询返回的类型问题