我想使用泛型类型进行转换,有什么简单的方法可以做到这一点吗?这是一个例子:
var resource = viewBase.getAnyInstance(resourceName) as T;
其中 T 是现有类型之一。
任何建议,将不胜感激。
我想使用泛型类型进行转换,有什么简单的方法可以做到这一点吗?这是一个例子:
var resource = viewBase.getAnyInstance(resourceName) as T;
其中 T 是现有类型之一。
任何建议,将不胜感激。
AGeneric
是一种处理多种类型的奇特方式,Objects
而无需对您的操作有任何清晰简洁的了解。这本身就产生了相当大的灵活性,因为它可以缓解您在使用Boxing
和Unboxing
.
为了帮助Generics
您澄清,我将使用该List
示例。主要是因为至少对我而言,它确实Casting
与Generics
.
问题是,如果你尝试过,Cast
你List Generics
会很快看到......你不能。
在我的示例中,我将使用 Shapes,因此理论上您有三个类。
课程:
当你学会了Casting
这很容易做到。
int i = 10;
string j = "I have ";
string d = j + (string)i;
并且您已将您的variable i
转换为String
. 只要类型合适;你没事吧。如果没有,您将遇到异常。
当你介绍Generics
它时,它会迅速变化。
现在,正如您在上面看到的,我们有Classes
三个代表Shapes
. 现在 aShape
将是一个普通的Object
,在技术上应该被那些 继承Shapes
。所以List<Square>
不能继承,List<Circle>
反之亦然。这似乎是定量的,似乎是合理的。但不是,为什么呢?
这是由于Constructed Type
发生数据转换的地方。
因此,在某些情况下,List
您必须编写 aLoop
才能将数据从一个传输List
到另一个。
所以这是Generics
非常有用的地方。
// Square List:
List<Square> lSq = new List<Square>();
lSq.Add(new Square("Red Square"));
lSq.Add(new Square("Blue Square"));
我们创建了一个Square List
来保存我们的对象。
// Generic Shape
List<Shape> shp = lSq.ConvertAll(
new Converter<Square, Shape>(lSqToshp));
我们实际上已经Generic
将Cast
这些值直接用于我们的 new List
。
现在,我明白这不是你的问题。您的询问:
我想使用泛型类型进行转换,有什么简单的方法可以做到这一点吗?
简短的回答,是的。但是变化会因您的目标和用途而异。你提到它是一个Abstract Class
.
现在,您是否正在尝试执行以下操作:
public void SomeMethod(object caller)
{
someClass<T> info = caller as someClass<T>;
if (info != null)
{}
}
那将描述Casting
为Abstract Class
.
var detail = (SomeClassBase)viewBase.getAnyInstance(detailName);
有很多变化。
一个听起来与您在此处模糊的问题相似的帖子。另一篇文章可能会在此处提供更多详细信息。需要注意的是,如果你试图传递一个Object
已知的,为什么不直接使用调用者呢?
不幸的是,您的问题需要更多详细信息才能获得更好的答案。但是听上去你的理解有困难Generics
。