Error screenshot 我正在创建一包泛型类,并逐步从 T 到 example_of_stored_class 指定泛型类型。
public class ModifiedList<example_of_stored_class> : AdvancedList<example_of_stored_class>
{
public void someMethod ()
{
}
}
public class AdvancedList<T> : List<T> where T : example_of_stored_class
{
public AdvancedList ()
{
}
}
public class example_of_stored_class
{
public string s = "Hi, i'm an example_of_stored_class!";
}
错误消息:
类型'example_of_stored_class'不能用作通用类型或方法'AdvancedList'中的类型参数'T'。从'example_of_stored_class'到'R7_app .example_of_stored_class'没有装箱转换或类型参数转换。
问题是-“ example_of_stored_class”和“ R7_app.example_of_stored_class”之间有什么区别?为什么会发生?
答案 0 :(得分:4)
就这样:
public class ModifiedList : AdvancedList<example_of_stored_class>
{
public void someMethod()
{
}
}
ModifiedList声明中存在错误。我不需要两次声明 example_of_stored_class 。谢谢,埃德·普伦凯特!
答案 1 :(得分:3)
List <String> lista = xmlPath.getList("activity.shopping.list().container.findAll{it.@number == 'eight'}.@color", String.class);
的首次出现是一个 type参数,因为它出现在类定义中类名之后的尖括号中:按照C#的规则,
List <String> lista2 = xmlPath.getList("activity.shopping.list().category.findAll{it.@type == 'present'}.@label", String.class);
采用名为example_of_stored_class
的类型参数。使用您的类的人可以为该参数提供任何实际的类型(至少,如果将整个内容编译为开头):
ModifiedClass
但是,您随后从另一个通用类继承了这个通用类,在该通用类中,您可以供应 example_of_stored_class
作为AdvancedList类型参数的 value 。我们不在这里定义AdvancedList,因此尖括号中的类型被解释为您要用于type参数的类型。
您已经找到一种方法来使var x = new ModifiedList<int>();
var y = new ModifiedList<String>();
在同一行中表示两个不同的事物,并且造成了混乱。
example_of_stored_class
这将编译:
example_of_stored_class
但是我怀疑您确实希望public class ModifiedList<example_of_stored_class>
: AdvancedList<example_of_stored_class>
从具有{em> same 类型参数的public class ModifiedList<T> : AdvancedList<example_of_stored_class>
{
public void someMethod()
{
}
}
继承:
ModifiedList<T>
否则,您将希望example_of_stored_class成为图片中唯一的类型参数。在这种情况下,ModifiedList不是通用的。它继承自“已实现”的通用类,该类已经提供了类型参数。
AdvancedList<T>
答案 2 :(得分:1)
你不能写:
ModifiedList<example_of_stored_class> : AdvancedList<example_of_stored_class>
因为在语句的第一部分中,您必须指示用于“替换”的通用参数。
因为它不能是类型。
您必须写:
ModifiedList<T> : AdvancedList<example_of_stored_class>
其中T不是代码定义的类型,因为它是模板工件。
此处的“模板”一词指的是C ++模板,即使C#泛型与C ++模板也不相同,但从历史上看,泛型来自模板。
Generic type parameters (C# Programming Guide)
您只是想写:
ModifiedList : AdvancedList<example_of_stored_class>
答案 3 :(得分:-1)
尝试一下,它可能会起作用或完全错误。
public abstract class Middle<T> : A<T> where T : ALayer
{
public int middleAttr { get; set; }
}