相关疑难解决方法(0)

如何在C#4.0中实现通用协方差和Contra-variance?

我没有参加PDC 2008,但我听到一些消息称C#4.0被宣布支持Generic协方差和反差异.也就是说,List<string>可以分配给List<object>.怎么会这样?

在Jon Skeet的C#深度书中,解释了为什么C#泛型不支持协方差和反方差.它主要用于编写安全代码.现在,C#4.0改为支持它们.它会带来混乱吗?

有人知道有关C#4.0的细节可以给出一些解释吗?

c# covariance contravariance generic-variance c#-4.0

106
推荐指数
2
解决办法
4万
查看次数

为什么不能转换这种泛型类型?

假设我有以下三个类/接口:

public interface IImportViewModel
{

}

public class TestImportViewModel : IImportViewModel
{

}

public class ValidationResult<TViewModel> where TViewModel : IImportViewModel
{

}
Run Code Online (Sandbox Code Playgroud)

由于TestImportViewModel实现了IImportViewModel,为什么以下不能编译?

ValidationResult<IImportViewModel> r = new ValidationResult<TestImportViewModel>();
Run Code Online (Sandbox Code Playgroud)

我理解错误消息"无法将类型'ValidationResult'隐式转换为'ValidationResult'"的含义.我只是不明白为什么会这样.这不是协方差吗?

c# generics

6
推荐指数
1
解决办法
135
查看次数

无法隐式转换类型 - 泛型

我有一个通用类Zone<T> where T: Media.Medium。在这个类中,我有一个方法public void AddNode(Node node),其中有一个node.ParentZone = this引发此编译器错误的语句:

无法将类型“Zone< T >”隐式转换为“Zone< Media.Medium >”

但我不明白为什么 aspublic abstract class Nodepublic Zone<Media.Medium> ParentZone字段和类Zone<T> where T: Media.Medium受 约束where T: Media.Medium,所以 TMedia.Medium在任何情况下都是 a 。

这是独立的代码:(完整Zone<T>且相关部分Node

public class Zone<T> where T: Media.Medium
{
    public readonly Type MediaType = typeof(T);
    public readonly Guid ID = new Guid();

    private readonly List<Node> _nodes = new List<Node>();

    public void …
Run Code Online (Sandbox Code Playgroud)

c# generics

4
推荐指数
1
解决办法
1518
查看次数