当前位置: 首页 > 编程语言 > C#

C#中泛型的命名空间作用域别名分享

时间:2023-04-10 17:32:01 C#

C#中泛型类型的命名空间作用域别名我们举个例子:publicclassX{}publicclassY{}publicclassZ{}publicdelegateIDictionaryBar(IListx,inti);publicinterfaceIFoo{//...BarBar{get;}}publicclassFoo:IFoo{//...publicBarBar{get{returnnull;//...}}}voidMain(){IFoofoo;//=...IEnumerable来源;//=...varresults=source.Select(foo.Bar);//<-此处编译错误}编译器说:无法从用法中推断出方法“System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)”的类型参数。尝试明确指定类型参数。这是因为,它无法将Bar转换为Func>。如果我可以在C#中为泛型类型创建类型名称空间作用域的类型别名,那就太好了。然后我没有将Bar定义为委托,而是将其定义为Func>的命名空间范围的别名。公共别名Bar=Func>;然后我还可以为例如IDictionary定义名称空间范围的别名。如果使用得当:),它会使代码更具可读性。现在,我必须内联泛型类型,而真正的代码可读性不是很好:(你有同样的麻烦:)?有什么理由不在C#3.0中吗?还是没有充分的理由而只是金钱和/或时间的问题?编辑:我知道我可以使用,但它不是命名空间范围的-对我来说不是很方便。编辑2:请参阅Joren的评论,他建议结构类型也可以解决问题。你真倒霉;using指令只影响其当前文件。没有名称空间范围的类型别名机制。这是一个经常被要求的功能,这就是它的要点。但它也是一个“不错”的便利特性,而不是一个真正为语言增加大量表示的特性,这是反对它的地方。这样做会很好,但它在优先级列表中不是很高。如果你这样做...varresults=source.Select((x,i)=>foo.Bar(x,i));它可以为您找出类型而无需明确指定它们。(不可否认,与其说这是一个解决方案,不如说这更像是一个解决方案)以上就是C#学习教程的全部内容:C#中泛型类型的命名空间作用域别名,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: