C# 保留列表的引用<;T>;不知道T?

C# 保留列表的引用<;T>;不知道T?,c#,unity-container,C#,Unity Container,澄清:目标是让我的UIPList 1.能够观察T为iUIP的任何观察列表或其继承者之一,2。能够在列表中绘制连接到该iUIP的UIPrefact按钮,以及3。能够随时更改它正在查看的列表(并且只查看一个列表) 我可以绘制gui按钮,让第一块手表工作(使用下面的代码),但是没有办法将引用存储在UIPList中,这样当我想观看其他内容时,我就可以从该列表中取消订阅。我无法在不丢失上述第三个功能的情况下将其转换为“UIPList”(这将使存储引用成为可能) 我现在正在尝试让菜单(他们知道UIPList

澄清:目标是让我的UIPList 1.能够观察T为iUIP的任何观察列表或其继承者之一,2。能够在列表中绘制连接到该iUIP的UIPrefact按钮,以及3。能够随时更改它正在查看的列表(并且只查看一个列表)

我可以绘制gui按钮,让第一块手表工作(使用下面的代码),但是没有办法将引用存储在UIPList中,这样当我想观看其他内容时,我就可以从该列表中取消订阅。我无法在不丢失上述第三个功能的情况下将其转换为“UIPList”(这将使存储引用成为可能)

我现在正在尝试让菜单(他们知道UIPLists和ObservableList涉及哪些内容)在内容发生变化时负责取消订阅,但理想情况下,我只需将ObservableList传递给UIPList,它就会知道如何观看、绘制gui,并在收到新列表时自行取消订阅

原创帖子: 我有
UIPList
,它应该观看
可观察列表,其中T:iUIP
。(
iUIP
表示具有可在
UIPList
中绘制的按钮的类)

问题是我无法存储对列表的本地引用,因为它可能是
observebleList
,也可能是
observebleList
observebleList
等等(其他继承
iUIP
的类)

我不能使用
UIPList
上的
observebleList
作为引用,因为我可能想查看一个列表,尽管从iUIP继承了字符,但该列表无法转换为
observebleList
,因此无法存储对该列表的本地引用
UIPList
应该查看

我使用
UIPList
上的
SetWatchList(observeList list)
方法查看列表,但由于没有对原始列表的引用,当我想更改
UIPList
正在查看的内容时,我没有需要从以前的列表中取消订阅的引用

使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
//使用System.Collections.ObjectModel;
公共类UIPList:单一行为
{
公共部门经理;
公共标签名称;
可供公众查阅的内容;
//ObservableList.ListChangedEventHandler订阅ChangeEvent;
公共无效观察列表(可观察列表),其中T:iUIP
{
this.subscribedchangevent=list.ListChanged;
list.ListChanged+=DrawUIPList;//要始终清除prev吗?
DrawUIPList(列表);
}
//不要参考旧的列表来知道停止观看什么!
//公共无效停止观察列表(可观察列表),其中T:iUIP
//  {
//list.ListChanged-=DrawUIPList;
//  }
//用于初始化
受保护的void Start()
{
this.GUIManager=GUIManager.Find;
}
//每帧调用一次更新
无效更新()
{
}
void DrawUIPList(对象源,ObservableList.ListChangedEventArgs e),其中T:iUIP
{
DrawUIPList(e.list);
}
作废图纸列表(可观察列表),其中T:iUIP
{
//todo AddComponentMenu/RemoveItem/adjut ReadOnlyCollectionBase更改的UIP
ClearContents();
this.Contents.Reposition();
foreach(列表中的tuip)//要使其自动,不需要每个
{
//Log(“添加UIP:+child.name”);
如果(uip.UIPButton是UIPCorporationButton)
创建(this.Contents.gameObject,(uip作为公司));
如果(uip.UIPButton是UIPCompanyButton)
创建(this.Contents.gameObject,(uip作为公司));
if(uip.UIPButton是UIPAssetButton)
创建(this.Contents.gameObject,(uip作为资产));
如果(uip.UIPButton是UIPIndButton)
创建(this.Contents.gameObject,(uip作为行业));
if(uip.UIPButton是UIPSecButton)
创建(this.Contents.gameObject,(uip作为扇区));
如果(uip.UIPButton是UIPOperativeButton)
创建(this.Contents.gameObject,(uip为可操作的));
if(uip.UIPButton为UIPAgencyButton)
创建(this.Contents.gameObject,(uip作为代理));
if(uip.UIPButton为UIPBrokerButton)
创建(this.Contents.gameObject,(uip作为代理));
如果(uip.UIPButton是UIPCellButton)
创建(this.Contents.gameObject,(uip作为单元格));
if(uip.UIPButton是UIPMissionButton)
创建(this.Contents.gameObject,(uip作为任务));
if(uip.UIPButton是UIPObjectiveButton)
创建(this.Contents.gameObject,(uip作为目标));
如果(uip.UIPButton是UIPChallengeButton)
创建(this.Contents.gameObject,(uip作为挑战));
}
//this.Contents.Reposition();
this.Contents.responseNow=true;
}
公共内容
{
//this.Contents.children.children.Clear();
int count=this.Contents.transform.childCount;
对于(int i=count-1;i>=0;i--)
{           
销毁(this.Contents.transform.GetChild(i.GameObject));
}
}
}

使整个类成为通用类

public class UIPList<T> : MonoBehaviour where T : iUIP
公共类UIPList:monobhavior,其中T:iUIP
然后可以存储对列表的引用。这更好地封装了列表的实际内容

不要忘记从方法中删除泛型约束

public void WatchList(ObservableList<T> list)
公共作废观察列表(可观察列表)

这将取消UIPList查看各种列表的功能,因此我无法再按照活动菜单的要求将观察列表从更改为等。每当UIPLists将内容更改为其他类型时,我都必须销毁并重新制作它们。主要的问题似乎是我在哪里可以使用iUIP ref t
public void WatchList(ObservableList<T> list)