【问题标题】:What's the difference when assigning a value to a field in square brackets LINQ?将值分配给方括号 LINQ 中的字段有什么区别?
【发布时间】:2015-04-23 17:31:57
【问题描述】:

我在 LINQ 中编码时看到,当一个值被分配给一个字段时,有时是以这种方式 Table["Field"] 和任何其他类似的 Table.Field强> 但有人可以解释一下有什么区别吗?

例如修改字段时:

var ttAbccode_xRow =
    (from ttAbccode_Row in ds.ABCCode select ttAbccode_Row).FirstOrDefault();

if (ttAbccode_xRow != null) {
    ttAbccode_xRow["PI"] = 3.1416;
}

if (ttAbccode_xRow != null) {
    ttAbccode_xRow.PI = 3.1416;
}

【问题讨论】:

  • 你能再具体一点吗?
  • 第一个示例是通过索引器访问值,第二个示例仅使用属性。当有很多值并且您不想在需要添加新值时总是扩展类时,第一个很有用。第二个是类型安全且可读的。
  • 而且根本不是“声明一个字段”...
  • 嗨@TravisJ 例如在修改字段时: var ttAbccode_xRow = (from ttAbccode_Row in ds.ABCCode select ttAbccode_Row).FirstOrDefault(); if (ttAbccode_xRow != null) { ttAbccode_xRow["PI"] = 3.1416; } 或 var ttAbccode_xRow = (从 ds.ABCCode 中的 ttAbccode_Row 选择 ttAbccode_Row).FirstOrDefault();如果(ttAbccode_xRow != null){ ttAbccode_xRow.PI = 3.1416; }
  • 我认为这与 LINQ 没有任何特别的关系。您已从 ds.ABCCode 集合中检索到一些对象。无论您检索到的任何对象都有一个索引器(第一个示例)、一个属性(第二个示例),或者两者都有。

标签: linq


【解决方案1】:

通过索引器(方括号)访问字段返回对象数据类型。这意味着您的编译器无法检测到数据类型不兼容。例如,您可以设置字符串值(例如“abcd”),并且在设计时不会出错,但直到运行时才会出错。

第二种方法(如果在您的结果集中可用)更安全。您的属性将具有正确的数据类型,因此编译器将在设计时检测数据类型不兼容。

如果我有两种访问方法可用,我总是更喜欢第二种。它更不容易出错。

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 2016-06-26
    • 2013-04-01
    • 2021-05-12
    • 2012-02-12
    • 2015-07-26
    • 2021-05-16
    相关资源
    最近更新 更多