gpt4 book ai didi

c# - 具有枚举键类型的 KeyedCollection 不会按 int 索引

转载 作者:太空狗 更新时间:2023-10-30 00:36:47 25 4
gpt4 key购买 nike

我有课

public class FooKeyedCollection : KeyedCollection<FooType,Foo>
{
}

public enum FooType
{
FooType1,
FooType2,
FooType3
}

public Foo
{
public FooType Type { get; set; }
public string Value { get; set; }
}

当我将项目添加到我的 FooKeyedCollection 时,我可以通过 FooType 对它们进行索引,但是当我尝试对它们进行 int 索引时,int 被解释为 FooType 枚举。结果,它导致了一个令人困惑的错误,即

public static void main()
{
FooKeyedCollection fkc = new FooKeyedCollection();

Foo myFoo = new Foo();
myFoo.Type = FooType.FooType3;
myFoo.Value = "someValue";

foo.Add( myFoo );

Foo myFooByType = foo[FooType.FooType3];
Foo myFooByIndex = foo[0]; // <-- exception thrown here
}

尝试通过整数索引检索项目时,执行此代码的结果是异常。我希望将 FooKeyedCollection 作为公共(public) API 的一部分公开,并且我想保护此 API 的使用者免受此错误的影响。有什么方法可以修改 FooKeyedCollection 类以获得正确的行为?

最佳答案

您可以考虑在此处使用“new”关键字:

public new Foo this[int index]
{
get
{
IList<Foo> self = this;
return self[index];
}
set
{
(IList<Foo>)[index] = value;
}
}

这将允许您按整数值进行索引。显式使用枚举将回退到 KeyedCollection 实现。

关于c# - 具有枚举键类型的 KeyedCollection 不会按 int 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/831260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com