如何在c#中强制转换

jga*_*rke 1 c#

可能重复:
C#中的类型转换

我如何在c#中投下?

Cum*_*yah 11

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

class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}

var lowerTypeInHierarchy = new LowerTypeInHiearchy();

// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK
Run Code Online (Sandbox Code Playgroud)

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

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

// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!
Run Code Online (Sandbox Code Playgroud)

如果您只是想"尝试强制转换"(即准备处理您尝试向下转换的类型实际上不是指定类型的情况,请使用as -cast代替:

var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;
Run Code Online (Sandbox Code Playgroud)

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