这个问题是我的一个好奇心,所以我不是在寻找一个解释。
我一直想知道为什么在转换时必须创建一个新变量。
当我转换为已知类型时,我认为编译器可以神奇地处理这种事情。
所以像这样的代码可以写得更短。
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/