c# - 在不创建新变量的情况下将对象转换为类型

标签 c# reference compilation

这个问题是我的一个好奇心,所以我不是在寻找一个解释。

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

当我转换为已知类型时,我认为编译器可以神奇地处理这种事情。

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

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";
    }
}

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

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

编辑:哦,我的理解有误!哎呀,我以为这没有意义...哈。 还有一点,您是否认为任何一种方法(假设使用了正确数量的括号)比另一种方法更清晰/可读?

最佳答案

这应该可行

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

或者您可以使用 LINQ

foreach (var row in dataTable.Rows.Cast<DataRow>().Where(row => row.ItemArray[0].GetType() == typeof(myTypeA)))
{
   ((myTypeA)row.ItemArray[0]).myCustomProperty = "dem breaks";
}

关于c# - 在不创建新变量的情况下将对象转换为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844176/

相关文章:

c - 优化C编译: removed unreferenced parts on-the-fly

android - ASSIMP - 安卓 NDK 工具链

c# - 具有取消能力的长时间运行操作模式

c# - 如何正确使用 WkHTMLToSharp 将 HTML 文件转换为 PDF?

javascript - $timeout 中的 "Controllers as"语法

c# - 从方法 C# 返回数组

c++ - 常量引用 - C++

c++ - boost - "static"与 "shared"库

javascript - 弹出窗口需要在屏幕上居中

c# - 在 Unity 中解析和注册项目数组