使用 using alias 指令对泛型接口进行别名化

Aliasing a generic interface with a using alias directive

提问人:Ernest3.14 提问时间:12/2/2022 更新时间:12/3/2022 访问量:100

问:

我知道不可能为泛型类型设置别名(例如 无效),但必须关闭右侧的泛型类型(例如 将起作用)。using Foo = Dictionary;using Foo = Dictionary<int, string>;

但是,别名 --相反,别名必须仅用于接口。我得到的错误是“CS0308:非泛型类型'IDictionary'不能与类型参数一起使用。有没有办法给整个事情别名?(或者实现我想要的更好方法?IDictionary<string, object>IDictionary

我在 API 中经常做的一件事是让函数接受 ,我想做一些类似于 的事情。事实上,我希望能够声明:IDictionary<string, object>using ParsedObjects = IDictionary<string, object>;

using ParsedObjectsHandler = Func<Interaction, object, IDictionary<string, object>, Task>;

(但我愿意只满足于前者。

C# 使用指令

评论

1赞 V.Leon 12/2/2022
您是否考虑过使用委托?您可以使用您提到的签名定义委托类型,并直接使用它,而无需更详细的内置通用委托。ParsedObjectsHandlerFunc<T1, ...>
0赞 Ernest3.14 12/2/2022
这听起来很有趣......我来看看
0赞 Ernest3.14 12/3/2022
@V.Leon,谢谢你,定义一个新的委托类型是要走的路。:D

答:

0赞 Ernest3.14 12/2/2022 #1

编辑:尽管下面的答案解决了这个问题(我把它留了下来,因为我在其他任何地方都找不到信息),但我确实在评论中接受了 V.Lion 的建议来定义我自己的委托类型。


问题是我试图使用而不是 .使用后者效果很好,即:System.Collections.IDictionarySystem.Collections.Generic.IDictionary<TKey, TValue>

using ParsedObjects = System.Collections.Generic.IDictionary<string, object>;