为什么不能在.NET中创建通用索引器?
以下代码抛出编译器错误:
public T this[string key] { get { /* Return generic type T. */ } }
这是否意味着您无法为通用成员集合创建通用索引器?
这是一个有用的地方.假设你有一个强类型OptionKey
的声明选项.
public static class DefaultOptions { public static OptionKeySomeBooleanOption { get; } public static OptionKey SomeIntegerOption { get; } }
通过IOptions
界面公开选项的位置:
public interface IOptions { /* since options have a default value that can be returned if nothing's * been set for the key, it'd be nice to use the property instead of the * pair of methods. */ T this[OptionKey key] { get; set; } T GetOptionValue (OptionKey key); void SetOptionValue (OptionKey key, T value); }
然后,代码可以使用通用索引器作为一个很好的强类型选项存储:
void Foo() { IOptions o = ...; o[DefaultOptions.SomeBooleanOption] = true; int integerValue = o[DefaultOptions.SomeIntegerOption]; }
属性在C#2.0/3.0中不能通用,因此您不能拥有通用索引器.
我不知道为什么,但索引器只是语法糖.写一个通用的方法,你将获得相同的功能.例如:
public T GetItem(string key) { /* Return generic type T. */ }
您可以; 只需
从声明中删除该部分,它就可以正常工作.即
public T this[string key] { get { /* Return generic type T. */ } }
(假设您的类是通用的,名为类型参数T
).