gpt4 book ai didi

C# 泛型未按预期工作

转载 作者:行者123 更新时间:2023-11-30 22:27:28 27 4
gpt4 key购买 nike

我们对泛型的使用有疑问。我们有一个通用键值对的通用集合,定义如下

public class KeyValueTemplate<K, V> : IGetIdentifier<K>
{
//...
}

public class KeyValueListTemplate<K, V> : ObservableCollection<KeyValueTemplate<K, V>>
{
//....
}

public class KeyValueStringListTemplate : KeyValueListTemplate<string,string> { }

我们在代码中使用它如下

public class test
{

public KeyValueStringListTemplate SetValuesList{get;set;}
public ObservableCollection<IGetIdentifier<string>> GetList()
{
return SetValuesList;
}

}

编译器不接受这个。错误是

Cannot convert type 'KeyValueStringListTemplate' to 'System.Collections.ObjectModel.ObservableCollection<IGetIdentifier<string>>

为什么?这两种类型对我来说都是一样的。

最佳答案

这一行

public class KeyValueListTemplate<K, V> : ObservableCollection<KeyValueTemplate<K, V>>

定义了一个新类型 KeyValueListTemplate,它是 ObservableCollection 的子类型,因此它们是不同的类型KeyValueListTemplate 可以安全地转换为 ObservableCollection,因为它具有 ObservableCollection 功能的超集(通过 Liskov 替换原则),但相反的转换不安全。

关于C# 泛型未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261343/

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