Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中从泛型类返回的列表,但在主类中没有更新列表(协变)?_C#_Generics - Fatal编程技术网

在c#中从泛型类返回的列表,但在主类中没有更新列表(协变)?

在c#中从泛型类返回的列表,但在主类中没有更新列表(协变)?,c#,generics,C#,Generics,从Class1返回泛型列表的c代码 private void Form1\u加载(对象发送方,事件参数e) { Class1 obj=新的Class1(); 列表协变=新列表(); 协变=对象标记(); System.Console.WriteLine(协变[0]); } 公共班级1 { 公共列表标记() { 列表协变=新列表(); 协变。添加(5);*无法在定义的协变列表中获取值。获取空值* 返回协变为列表; } } 无法在定义的协变列表中获取值。获取空值vlaue 无法在定义的协变列表中获

从Class1返回泛型列表的c代码

private void Form1\u加载(对象发送方,事件参数e)
{
Class1 obj=新的Class1();
列表协变=新列表();
协变=对象标记();
System.Console.WriteLine(协变[0]);
}
公共班级1
{
公共列表标记()
{
列表协变=新列表();
协变。添加(5);*无法在定义的协变列表中获取值。获取空值*
返回协变为列表;
}
}
无法在定义的协变列表中获取值。获取空值vlaue 无法在定义的协变列表中获取值。获取空值vlaue 无法在定义的协变列表中获取值。获取空值vlaue
无法在定义的协变列表中获取值。获取null vlaue

如果要在方法中显式使用
int
,我认为不应该使用
泛型

这应该是您的第一个
提示,您首先不应该使用泛型。
下面是您的类在更恰当地使用泛型时的外观

public class Class1<T>
    {
        private List<T> covariants = new List<T>();

        public List<T> mark(T item)
        {
            covariants.Add(item);
            return covariants;
        }
    }
公共类1
{
私有列表协方差=新列表();
公共列表标记(T项)
{
协方差。添加(项目);
返回协方差;
}
}
var s=new Class1。标记(5)
将返回计数1的列表。
s.mark(10)
将返回包含两项的列表


有关c#泛型的更多信息,您可以阅读文档->

列表
不是协变的。代码被正确地执行,没有错误,但列表仍然获取空值。正如@johnathanbarclay指出的,返回列表的正确方法是什么,您不能将
列表
强制转换为
列表
。尝试
协变为列表
,您将获得CS0039编译时error@john
新列表
而不是
新列表
。哦,我明白了。。谢谢你们的帮助:)
public class Class1<T>
    {
        private List<T> covariants = new List<T>();

        public List<T> mark(T item)
        {
            covariants.Add(item);
            return covariants;
        }
    }