C# 如何正确解决扩展方法上的不明确调用异常

C# 如何正确解决扩展方法上的不明确调用异常,c#,.net,extension-methods,assemblies,ambiguous,C#,.net,Extension Methods,Assemblies,Ambiguous,我刚刚在C#中收到以下编译时错误: 不明确的调用: LibA中的字符串GetDescription(此LibA.enum_联系人) LibB中的字符串GetDescription(此LibB.enum_联系人) 很清楚这意味着什么,但由于我需要使用这两个库,而且它们都是封闭源代码的,我想知道什么是合适的解决方法。在使用代码时,我可以想到以下几点: 将源文件拆分为两个部分,但不确定这是否会产生相同的错误(是在每个文件的作用域中使用指令,还是在每个代码单元中使用指令?) 为这些扩展方法创建包装器

我刚刚在C#中收到以下编译时错误:

不明确的调用:
LibA中的字符串GetDescription(此LibA.enum_联系人)
LibB中的字符串GetDescription(此LibB.enum_联系人)

很清楚这意味着什么,但由于我需要使用这两个库,而且它们都是封闭源代码的,我想知道什么是合适的解决方法。在使用代码时,我可以想到以下几点:

  • 将源文件拆分为两个部分,但不确定这是否会产生相同的错误(是在每个文件的作用域中使用指令,还是在每个代码单元中使用指令?)
  • 为这些扩展方法创建包装器
  • 使用完全限定名调用扩展方法作为普通方法
  • 或者,另外,使用-指令用
    重新定义类名,以减少痛苦
这两项似乎都不完全令人满意。在某些OO语言中,可以将您接受的粒度限制在一定的范围内,或者,例如在Eiffel中,当您导入一个方法并且出现名称冲突时,可以重命名该方法。我希望能够做到:

using LibA rename ClassA.GetDescription to GetMyDescription
using LibB rename ClassB.GetDescription to GetDescriptionB
但我不相信我在6.0之前见过这样的C#方法。也就是说,您可以重命名类名,但不能重命名方法名


有人有比上述建议更好的想法吗?

你可能想看看这个问题:谢谢,@Dennis_E,这些节目确实展示了这里发生的事情。他的建议是使用非扩展方法语法来克服名称冲突(我上面的选项3),非扩展方法语法会容易得多。如果只有两个方法,我就写两个包装器方法。你可能想看看这个问题:谢谢,@Dennis_E,这确实说明了这里发生了什么。他的建议是使用非扩展方法语法来克服名称冲突(我上面的选项3),非扩展方法语法会容易得多。如果只有两个方法,我就写两个包装器方法。