这是完全有效的:

public interface IWidgetGetter
{
    IEnumerable<T> GetWidgets<T>() where T : IWidget;
}

也就是说,它定义了一个无类型接口(interface),其中包括一个方法来获取实现 IEnumerable 的某种类型的 IWidget

我如何把它变成一个属性?

不起作用的事情:
IEnumerable<T> Widgets<T> { get; set; } where T : IWidget
IEnumerable<T> Widgets { get; set; } where T : IWidget
IEnumerable<T> Widgets where T : IWidget { get; set; }
IEnumerable<T> Widgets<T> where T : IWidget { get; set; }

最佳答案

没有通用属性这样的东西。

类型参数仍然是一种参数。就像您不能将带参数的方法转换为属性一样,您也不能将泛型方法转换为属性。

你可以做的最接近的事情是:

public interface IWidgetGetter<T> where T : IWidget
{
    IEnumerable<T> Widgets { get; }
}

关于c# - 如何在接口(interface)上创建通用约束属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27531939/

10-11 05:18