我有以下代码:
public interface IMenuItem
{
IWebElement Parent { get; }
}
public class MenuItems
{
public T GetMenuItem<T>() where T : IMenuItem, new()
{
var menuItem = new T();
return menuItem;
}
}
public abstract class Page : IEnumerable<IComponent>
{
private Func<IMenuItem> _getMenuItems = new MenuItems().GetMenuItem<IMenuItem>;
}
我正在尝试将
new MenuItems().GetMenuItem<IMenuItem>
函数存储在_getMenuItems
字段中,但是由于这是一个通用函数,因此无法正常工作。如何将泛型函数存储到变量中?进行
new MenuItems().GetMenuItem<IMenuItem>
无法正常工作,它告诉我:现在,我有许多实现
IMenuItem
的具体类型,我希望委托(delegate)人接受这些类型。我不想为实现IMenuItem
的每种具体类型都单独分配一个委托(delegate)。相反,我只有一个委托(delegate),可以接受实现IMenuItem
的具体类型。 最佳答案
问题在于new()约束。
由于IMenuItem
是接口(interface),因此无法实例化,因此new()约束将成为问题。
编辑:
您可以通过以下两种方法解决此问题:
var method = typeof(MenuItems).GetMethod("GetMenuItem");
var instance = new MenuItems(); // Maybe convert the class into a static class??
var genericMethod = method.MakeGenericMethod(typeof(MenuItem1));
var result = genericMethod.Invoke(instance, null) as IMenuItem;
dynamic instance = new MenuItems(); // Maybe convert the class into a static class??
var result = instance.GetMenuItem<MenuItem1>() as IMenuItem;
var menuItems = new MenuItems();
var result = _instance.GetMenuItem<MenuItem1>() as IMenuItem;
关于c# - 如何在C#中的变量中存储泛型函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59266362/