-4

我想使用泛型类型进行转换,有什么简单的方法可以做到这一点吗?这是一个例子:

var resource = viewBase.getAnyInstance(resourceName) as T;

其中 T 是现有类型之一。

任何建议,将不胜感激。

4

1 回答 1

1

AGeneric是一种处理多种类型的奇特方式,Objects而无需对您的操作有任何清晰简洁的了解。这本身就产生了相当大的灵活性,因为它可以缓解您在使用BoxingUnboxing.

为了帮助Generics您澄清,我将使用该List示例。主要是因为至少对我而言,它确实CastingGenerics.

问题是,如果你尝试过,CastList 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));

我们实际上已经GenericCast这些值直接用于我们的 new List

现在,我明白这不是你的问题。您的询问:

我想使用泛型类型进行转换,有什么简单的方法可以做到这一点吗?

简短的回答,是的。但是变化会因您的目标和用途而异。你提到它是一个Abstract Class.

现在,您是否正在尝试执行以下操作:

public void SomeMethod(object caller)
{
   someClass<T> info = caller as someClass<T>;
   if (info != null)
   {}
}

那将描述CastingAbstract Class.

var detail = (SomeClassBase)viewBase.getAnyInstance(detailName); 

有很多变化。

一个听起来与您在此处模糊的问题相似的帖子。另一篇文章可能会在此处提供更多详细信息。需要注意的是,如果你试图传递一个Object已知的,为什么不直接使用调用者呢?

不幸的是,您的问题需要更多详细信息才能获得更好的答案。但是听上去你的理解有困难Generics

于 2013-02-07T23:08:18.800 回答