- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我经常需要一组带有数字标识符的非顺序对象。我喜欢为此使用 KeyedCollection,但我认为有一个严重的缺点。如果您使用 int 作为键,您将无法再通过索引访问集合的成员(collection[index] 现在实际上是 collection[key])。这是一个足以避免使用 int 作为键的严重问题吗?更好的选择是什么? (也许是 int.ToString()?)
我以前做过这个没有任何大问题,但最近我遇到了一个讨厌的障碍,如果 key 是一个 int,针对 KeyedCollection 的 XML 序列化不工作,由于 a bug in .NET .
最佳答案
基本上,您需要确定类的用户是否可能会因为他们不能这样做而感到困惑,例如:
for(int i=0; i=< myCollection.Count; i++)
{
... myCollection[i] ...
}
尽管他们当然可以使用 foreach,或使用强制转换:
for(int i=0; i=< myCollection.Count; i++)
{
... ((Collection<MyType>)myCollection)[i] ...
}
这不是一个容易的决定,因为它很容易导致 heisenbug。我决定在我的一个应用程序中允许它,在该应用程序中,类(class)用户的访问几乎完全是按键。
不过我不确定我是否会为共享类库这样做:一般来说,我会避免在公共(public) API 中公开 KeyedCollection:相反,我会在公共(public) API 中公开 IList
关于序列化,还有一个性能问题that I reported to Microsoft Connect : KeyedCollection 维护一个内部字典和一个列表,并对两者进行序列化 - 序列化列表就足够了,因为在反序列化时可以很容易地重新创建字典。
由于这个原因以及 XmlSerialization 错误,我建议您避免序列化 KeyedCollection - 而只序列化 KeyedCollection.Items 列表。
我不喜欢the suggestion of wrapping your int key in another type .在我看来,简单地增加复杂性以便可以将类型用作 KeyedCollection 中的项目是错误的。我会使用字符串键 (ToString) 而不是这样做 - 这很像 VB6 Collection 类。
FWIW,我问了the same question前段时间在MSDN论坛上。 FxCop 团队的一名成员给出了回应,但没有确定的指导方针。
关于c# - 可以使用 int 作为 KeyedCollection 中的键吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/201956/
System.Collections.ObjectModel.KeyedCollection 类是 System.Collections.Generic.Dictionary 的一个非常有用的替代品,
我是 C# 的新手,如果这是一个愚蠢的问题,请原谅我。我遇到错误,但我不知道如何解决。我正在使用 Visual Studio 2010。 这行代码 public class GClass1 : Key
我想创建一个方法来遍历键控集合。我想确保我的方法支持迭代任何扩展 KeyedCollection> 的集合 方法如下: public void IterateCollection(KeyedColle
虽然我环顾四周,但没有找到任何与我的问题完全匹配的东西 this肯定是接近的。基本上,我有一个 Page 对象的 KeyedCollection 作为基础,我希望派生对象的强类型集合来自它。具体来说,
我有一个类 (SomeClass),它包含 string 类型的属性 Name。我需要存储该类的数组并按名称查找其项。为此,有两种类型的集合:KeyedCollection 和Dictionary。我
我正在开发一个 C# 对象复制构造函数,其中一部分涉及将 KeyedCollection 的内容复制到新的 KeyedCollection 中。这是我目前实现的: class MyKeyedColle
首先让我解释一下为什么我要使用 KeyedCollection。我正在构建一个 DLL,我有一个项目列表,我需要将它们添加到一个集合中,并让它们保持我放置它们的顺序,但我还需要通过它们的索引和键来访问
我正在寻找一种与通用字典的 Keys 属性(KeyCollection 类型)一样高效的方法。 使用 Linq select 语句可以,但每次请求键时它都会遍历整个集合,而我相信键可能已经存储在内部。
我有这段代码(我希望它能工作,但它失败了)。我真的不知道为什么。请帮忙 static void Main(string[] args) { var x = new M
我想使用 KeyedCollection 来存储一个针对字符串键值的类。我有以下代码: public class MyClass { public string Key; public
我认为这是我们遇到的一个常见问题。 class Person { public string place; public string name; public Person(
我是 WPF 数据绑定(bind)的初学者,我刚刚发现了一种令人困惑的行为。也许有人可以帮助我: 我的 xaml 代码将列表框绑定(bind)到列表: 如果绑定(bind)的实际项目是一个列表,一切
基本上我有一个 KeyedCollection ,并且我希望能够按键(或者最好使用自定义比较器)对集合进行排序。 如果这不可能,有人可以推荐另一个类,其中键嵌入在我可以排序的值中吗? 最佳答案 根据更
我经常需要一组带有数字标识符的非顺序对象。我喜欢为此使用 KeyedCollection,但我认为有一个严重的缺点。如果您使用 int 作为键,您将无法再通过索引访问集合的成员(collection[
我有课 public class FooKeyedCollection : KeyedCollection { } public enum FooType { FooType1, FooT
是否存在与 C# 抽象 KeyedCollection 类具有相同行为的 Java 集合(即可以通过键和索引检索项目)?我环顾四周,但找不到类似的东西。 谢谢,尼克 最佳答案 这是使用“KeyedIt
请参阅下面的 VS2013 更新。 将类用作 d:DesignInstance 时暴露了 KeyedCollection ,XAML 设计器发出以下警告: The number of generic
我是一名优秀的程序员,十分优秀!