似乎我用VB.NET编写的扩展方法库存在问题。
我有2个重载的扩展方法Crop()。
当我从VB.NET项目中引用lib时,我看到它们。如果从C#项目引用它,我看不到它们。
到底是怎么回事?
答案 0 :(得分:3)
它的工作原理如下:
out
或ref
参数调用方法时,编译器要求您在调用参数上重复out
或ref
关键字。这是因为对于语言来说,变量是否已经初始化是很重要的。ByRef
参数调用方法时,编译器不要求您在调用参数上重复ByRef
,它只是为您排序。这是因为语言与变量是否已经初始化无关。因此,VB.NET可以使用ByRef
轻松解析扩展方法,因为只有一种可能的方法可以调用它。但是,C#不知道该怎么做,因为没有语法告诉它是否使用out
或ref
来调用该方法。
您所能做的就是:
ByVal
参数。答案 1 :(得分:1)
如果没有看到代码,我猜你在C#.cs文件中缺少using
语句。
//other usings...
//Extension using statement...
using MyAssembly.Extensions;
class Program {
static void Main() {
//some code
String myString = "blah";
//call the extension method now
String newString = myString.MyExtensionMethod();
}
}
但这只是猜测而没有看到你的代码。
希望这会有所帮助!!
答案 2 :(得分:0)
我的方法是使用byref参数。我将它改为byval并且有效。
显然很奇怪。在VB项目中它可以,但在C#中没有。显然C#不支持使用byref的扩展方法,或者它是一个bug。