gpt4 book ai didi

c# - 创建接口(interface)时的差异

转载 作者:行者123 更新时间:2023-11-30 15:31:04 26 4
gpt4 key购买 nike

  public interface SomeInterfaceName<out T> where T : struct
{
T? SomePropertyName { get; }
}

我得到的错误是:

error CS1961: Invalid variance: The type parameter 'T' must be invariantly valid on 'SomeInterfaceName.SomePropertyName'. 'T' is covariant.

不需要这是协变的。我也可以删除 out 关键字。但随后 Resharper 建议我可以使用协方差,我同意,但我不明白为什么我不能。我只使用 T 作为返回值。还是因为Nullable<>不支持?

任何人都可以解释错误吗?

最佳答案

struct 做一个类型参数是没有意义的约束协变。值类型类型参数根本不支持泛型变体 - 例如,没有从 IEnumerable<int> 的转换到 IEnumerable<long>IEnumerable<object>即使有来自 int 的转化到两个longobject .

您实际遇到的问题是 Nullable<T>不是协变的,但您正在尝试使用 TNullable<T> 类型的属性中.这就是导致错误的原因。

我个人认为如果类型参数带有 struct 会更好不能将约束声明为协变或逆变(假设它不会有用),但它本身并没有被禁止。

关于c# - 创建接口(interface)时的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163997/

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