问题标签 [indexed-properties]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
29459 浏览

c# - 为什么 C# 不实现索引属性?

我知道,我知道... Eric Lippert 对这类问题的回答通常类似于“因为不值得为此付出设计、实施、测试和记录的成本”。

但是,我仍然想要一个更好的解释......我正在阅读这篇关于 C# 4 新特性的博客文章,在关于 COM 互操作的部分中,以下部分引起了我的注意:

顺便说一句,这段代码使用了一个新特性:索引属性(仔细看看 Range 后面的方括号。)但是这个特性只适用于 COM 互操作;您不能在 C# 4.0 中创建自己的索引属性

好的,但是为什么?我已经知道并后悔在 C# 中无法创建索引属性,但这句话让我重新思考了一下。我可以看到实施它的几个很好的理由:

  • CLR 支持它(例如,PropertyInfo.GetValue有一个index参数),所以很遗憾我们不能在 C# 中利用它
  • 支持 COM 互操作,如文章所示(使用动态调度)
  • 它是在 VB.NET 中实现的
  • 已经可以创建索引器,即将索引应用于对象本身,因此将这个想法扩展到属性可能没什么大不了的,保持相同的语法并只是用this属性名称替换

它允许写那种东西:

目前我知道的唯一解决方法是创建一个ValuesCollection实现索引器的内部类(例如),并更改Values属性以使其返回该内部类的实例。

这很容易做到,但很烦人......所以也许编译器可以为我们做到!一种选择是生成一个实现索引器的内部类,并通过公共通用接口公开它:

但当然,在这种情况下,该属性实际上会返回 a IIndexer<int, string>,并且不会真正成为索引属性……最好生成一个真正的 CLR 索引属性。

你怎么看 ?您想在 C# 中看到此功能吗?如果不是,为什么?

0 投票
5 回答
5733 浏览

c# - 命名索引器属性是否可能?

假设我在类中有一个数组或任何其他集合,以及一个返回它的属性,如下所示:

现在,我可以写这样的东西:

0 投票
6 回答
31479 浏览

c# - 在 C# 中轻松创建支持索引的属性

在 C# 中,我发现索引属性非常有用。例如:

但是据我所知,没有语法糖来支持本身支持索引的字段(如果我错了,请纠正我)。例如:

我需要这个的原因是我已经在我的类上使用了 index 属性,但是我有 GetNumX(), GetX(), 和SetX()函数如下:

正如您可能看到的那样,将它们公开为一个可索引的字段属性会更有意义。每次我想要语法糖时,我都可以编写一个自定义类来实现这一点,但所有样板代码似乎都是不必要的。

因此,我编写了一个自定义类来封装样板文件,并使创建可索引的属性变得容易。这样我可以添加一个新属性,如下所示:

这个新的 IndexedProperty 类的代码如下所示:

所以我的问题是:有没有更好的方法来做这一切

具体来说,在 C# 中是否有更惯用的方法来创建可索引的字段属性,如果没有,我该如何改进我的IndexedProperty课程?

编辑:经过进一步研究,Jon Skeet 将其称为“命名索引器”。

0 投票
1 回答
796 浏览

java - 从索引属性中删除项目 - JavaBeans 问题

我正在使用索引属性(使用 struts 和 java/jsp)。我们有一个动态表,可以在表中添加/删除行/项目。行的添加按预期工作 - 我在操作类的表单中看到了新行。删除的行没有被设置(显然),但它们也没有从列表中删除。我已经实现了一个 void setItem(List)、void setItem(index)、Item getItem(index) 和 List getItem() 方法。我找不到太多关于索引属性行为的信息。是否有我需要实现的重置方法,或者索引属性应该负责设置新列表?据我所知,仅设置了仍在列表中的项目,并且使用 void setItem(Item) 方法设置了它们。

0 投票
1 回答
732 浏览

flash - 为什么这段代码会抛出 ReferenceError #1069?

这段代码的第一行是抛出 ReferenceError #1069。“在 ObjectButtonSkin 上找不到属性 focusMask,并且没有默认值。” “皮肤”变量的类型为 MovieClip,而实际对象实例的类型为 ObjectButtonSkin(它扩展了 MovieClip)。

这以前从来不是问题,所以我不确定为什么会这样。ObjectButtonSkin 类没有被标记为动态或其他任何东西,所以也许这就是问题所在?一个站点建议我应该使用“()”而不是“[]”来访问该属性,但这似乎不对。

0 投票
2 回答
755 浏览

f# - 在类型中使用 F# 索引属性

我正在尝试将以下 C# 转换为 F#:

这是我到目前为止所拥有的:

我上面的类型似乎有两个问题我不知道如何解决。第一个是矩阵。[(x, y)] 应该具有类型 `a[] 但具有类型 double[,]。第二个是类型定义必须在成员和接口定义之前有 let/do 绑定。问题是我试图在 do 块中填充索引属性,这意味着我必须先创建它。

提前致谢,

鲍勃

0 投票
3 回答
1194 浏览

wpf - 绑定驱动的索引属性不返回

它的实例设置为此 XAML 的 DataContext:

但这不起作用。

这也不是。

这行得通。

除了考虑额外的财产之外,还有什么解决方案吗?直接在 XAML 中的东西?

0 投票
0 回答
904 浏览

entity-framework - 让实体框架(代码优先)忽略索引属性

在一个实体中,我有以下声明:

因为实体框架不喜欢索引属性,所以我试图忽略它:

我还尝试从模型构建器中删除所有发现约定,因此必须明确设置所有属性关系:

当执行获取实体的 linq 查询时,抛出异常“不支持索引属性”。

有人知道如何让实体框架忽略索引属性吗?该财产必须对其他实体公开。

提前致谢!

0 投票
2 回答
156 浏览

.net - 这段代码的含义是什么?

以下是 .Net Sdk 中提供的代码示例:

我的问题:这个reader(0)实际上是调用这个属性reader.item(0)的快捷方式吗?

0 投票
1 回答
1282 浏览

ios - 什么是不对核心数据属性进行索引的原因?

什么是不对核心数据属性进行索引的原因?据我了解,如果可搜索属性有助于提高性能,则应该对其进行索引。如果是这样,为什么不是所有内容都“在内部”自动索引?为什么我必须为适用的属性打开/关闭它,不索引属性的原因是什么?如果它没有自动应用于所有内容,那肯定是有原因的。那可能是什么?