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