将对象转换为类型而不创建新变量

Ami*_*ble 6 c# compilation reference

这个问题是我的好奇心,所以我不会寻找解决办法,只是做一个解释。

我一直想知道为什么在转换时必须创建一个新变量。

这是我认为编译器可以在我转换为已知类型时发挥其魔力的事情。

所以这样的代码可以写得更短。

DataTable dataTable = RetrieveDataTableFrom(whereEver);

foreach (DataRow row in dataTable.rows)
{
    if (row.ItemArray[0].GetType() == typeof(myTypeA))
    {
         MyTypeA myTypeA = (myTypeA)row.ItemArray[0];
         myTypeA.myCustomProperty = "dem works";
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样,我只是更直接地编辑属性。

foreach (DataRow row in dataTable.rows)
{
    if (row.ItemArray[0].GetType() == typeof(myTypeA))
    {
         (myTypeA)row.ItemArray[0].myCustomProperty = "dem breaks";
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:哦,我的理解有误!哎呀,我觉得这没有道理……哈哈。额外一点,您是否认为这两种方法(假设使用正确数量的括号)比另一种方法更清晰/可读?

Ada*_*ras 2

嗯,这是因为您在第二个示例中实际上没有以正确的方式进行转换。

((myTypeA)(row.ItemArray[0])).myCustomProperty = "dem breaks";
Run Code Online (Sandbox Code Playgroud)

选角时,尽可能清楚地了解你到底要选角的内容通常很重要。在这种情况下,添加几组括号向编译器表明您不想转换rowor row.ItemArrayor row.ItemArray[0].myCustomProperty,但是row.ItemArray[0],它实际上是类型myTypeA