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