如何在c#中强制转换

时间:2010-09-06 18:31:43

标签: c#

  

可能重复:
  Typecasting in C#

如何在c#中强制转换?

3 个答案:

答案 0 :(得分:11)

您只需使用普通(强制转换)运算符:

class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}

var lowerTypeInHierarchy = new LowerTypeInHiearchy();

// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK

当然,为了使转换有效,您尝试强制转换的对象必须是您所投射的类型,否则您将获得运行时异常:

class AnotherLowerTypeInHierarchy : HigherTypeInHierarchy {}
var anotherLowerTypeInHierarchy = new AnotherLowerTypeInHiearchy();

// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!

如果您只是想“尝试投射”(即准备处理您尝试向下转换的类型实际上不是指定类型的情况,请使用作为 -cast代替:

var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;

向下转换通常是一个坏主意,因为它意味着知道类型系统之外的类型。层次结构中较高级别的操作应该对所有派生类型都有效(请参阅Liskov substitution principle),但通过向下转换,您可以说明该类型实际上是特定派生类型的相反要求。

答案 1 :(得分:3)

Class Animal {  }

Class Dog : Animal {  }

Dog dog = new Dog();
Animal animal = dog; //upcasting
Dog sameDog = (Dog)animal; //Downcasting

答案 2 :(得分:1)

http://igoro.com/archive/fun-with-c-generics-down-casting-to-a-generic-type/

查看上面的网址。

另外,认为@Barry发布的链接将是我链接的第二选择,因为这是一个非常简单的例子。