何时使用()与'as'来改变类型?

Aar*_*ide 5 c# type-conversion

可能重复:
转换:( NewType)与Object对象作为NewType
Casting vs使用CLR中的'as'关键字

//var gridView = (gridViewRow.NamingContainer as GridView); <-- works too
var gridView = (GridView)gridViewRow.NamingContainer;
Run Code Online (Sandbox Code Playgroud)

我对此的不完全理解是使用as关键字可以null在使用强制转换()时抛出异常.我的目标是能够问自己"我应该选择哪种方式?" 并知道如何回答它.

Chr*_*isF 5

这取决于,但基本上:

如果你知道并且可以保证对象你认为它的类型那么使用().

如果它可能是其他东西,那么使用as并检查null.在这种情况下,你有:

var realThing = someObject as MyClass;
if (realThing != null)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

您可以使用is以防止()导致:

if (someObject is MyClass)
{
    var realThing = (MyClass)someObject;
    ....
}
Run Code Online (Sandbox Code Playgroud)

但这导致两次转换,而不是as直接转换().

这就是"它依赖"的地方.你必须根据具体情况决定哪个更合适.您可能还需要遵守编码标准.

  • 您不应该使用"is"来保护,因为那样您将执行2次转换.如果您需要该功能,请使用"as"进行转换并检查是否为null. (2认同)