大家好。有一个特定的接口IChatAttributes可以继承某些类(AiAttributes, NavAttributes, ContentAttributes.. - 这些类是使用单例模式创建的)。还有一个类ChatAttributes在构造函数中创建继承者的实例并将它们放在它的唯一属性中。List<IChatAttributes> AttributesList
需要编写一个泛型方法,AttributesList
从对象中获取继承者类的对象并返回它们。
我确实喜欢这样:
public T GetCurrentAttribute<T>()
{
T returnedObject = default(T);
foreach (var item in AttributesList)
{
if (item is T) returnedObject = (T)item;
else returnedObject = default(T);
}
return returnedObject;
}
现在我模拟一下情况:
attributesList形成并包含两个对象IChatAttributes(AiAttributes和 ContentAttributes)。使用另一个类中的异步方法,我想使用上述通用方法检索这些对象:
var aiObj= await Task.Factory.StartNew(() => attribute.GetCurrentAttribute<AiRoutAttributes>());
var cntObj= await Task.Factory.StartNew(() => attribute.GetCurrentAttribute<ContentAttributes>());
结果,aiObj数据来了cntObj又不来。
我在哪里错过了什么,帮我弄清楚。
您的实现
GetCurrentAttribute不正确。只需在调试器下查看方法的进度,错误就在表面上。一般来说,您可以更轻松地重写它,如下所示: