c# where T 不能conert to T问题

asd3232 2018-02-15 02:39:41

public class testList<T> : List<T>where T:BaseObject
{
public new void Add(T item)
{
base.Add(item);
item.RemoveEvent += Remove;
}
public new void Remove(T item)
{
base.Remove(item);
}
}

代码如上,在baseobject中实现了RemoveEvent的事件,但是这里出错了,想整一个泛型的回调列表,能够回调移除
...全文
605 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2018-02-16
  • 打赏
  • 举报
回复
仔细看了下,原来你的RemoveEvent绑定的是下面的Remove方法,那只能是你2楼的处理方法了。这虽然也有点奇怪。还是你T:BaseObject类的事件设计不是很好造成的
圣殿骑士18 2018-02-16
  • 打赏
  • 举报
回复
首先,这和拆箱无关,和基本类型相关的才叫拆箱。你这个派生类的转换,只是所谓“后期绑定”。 其次,你第一次发出的代码,并没有错误,不知道你说的错误从何说起。 以下你的代码,我试过并没有问题:.net4.0下

public class testList<T> : List<T> where T : bauser
    {
        public new void Add(T item)
        {
            base.Add(item);
            item.RemoveEvent += item_RemoveEvent;
        }

        void item_RemoveEvent()
        {
            throw new NotImplementedException();
        }
        public new void Remove(T item)
        {
            base.Remove(item);
        }
    }
exception92 2018-02-16
  • 打赏
  • 举报
回复
回调移除?貌似BindingList集合支持,你查下。
  • 打赏
  • 举报
回复
这里怎么就拆箱了? 这个 BaseObject 是干什么的?有什么必要使用这个 testList<T>?为什么不直接设计 testList<BaseObject> 而是 testList<T>? 如果没有必要增加类型(接口),千万不要为了类型而类型。尽可能少写类型。你要说明一下这里的必要性,举一个实际应用的例子!比如说需要特意定义一个类型而不是直接在业务逻辑代码中写应用代码?
asd3232 2018-02-15
  • 打赏
  • 举报
回复
public class testList<T> : List<T>where T:BaseObject { public new void Add(T item) { base.Add(item); item.RemoveEvent += Remove; } public new void Remove(BaseObject item) { base.Remove(item as T); } } 增加一次拆箱操作,智能这样解决了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧