gpt4 book ai didi

c# - 在不知道 T 的情况下将泛型类型指定为参数参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:47 31 4
gpt4 key购买 nike

我正在解决一个问题,但对泛型及其正确的声明/使用仍然一无所知。我得到了前提,但我仍然无法理解泛型的一些细节。

给定以下代码(不编译且包含代码异味):

public interface IUIConcern<out T> where T : IUIConcernExtension
{

string Name { get; }
Func<T> Extend();
}

public class UIConcern
{
public static void Register<T>(string concernName, IUIConcern<T> uiConcern) where T : IUIConcernExtension
{
Concerns.Add(uiConcern);
}

public static List<IUIConcern<T>> Concerns{
get {
// Logic...
}
set {
// Logic...
}
}
}

...我有几个问题:

  • 为什么我必须指定这部分public static void Register<T>(string concernName, IUIConcern<T> uiConcern) where T : IUIConcernExtension当我已经约束了 T 时有一个约束在声明中public interface IUIConcern<out T> where T : IUIConcernExtension
  • 我怎样才能拥有一个包含 List<> 的属性?我的IUIConcern<T>不知道T除了知道它将来自 IUIConcernExtension 之外?

同样,我意识到这无法编译且不正确,只是想看看如何保存可能具有许多不同类型的 IUIConcern<> 的通用项目列表。元素。

谢谢!

最佳答案

你需要有一个基础接口(interface),例如:

public interface IUIConcern
{
string Name { get; }
}

public interface IUIConcern<out T> : IUIConcern where T : IUIConcernExtension
{
Func<T> Extern();
}

您将如何定义 ConcernsRegister将取决于您如何对待 T .或者,如果您只处理您知道 T 的实例, 你可以使用 Dictionary<Type, List<IUIConcern>>持有任何东西,或者可能放弃基本接口(interface)并使用 object 存储取决于您在 Controller 代码中需要什么。

关于c# - 在不知道 T 的情况下将泛型类型指定为参数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572778/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com