gpt4 book ai didi

c# - 如何在 VB 代码中调用 C# 扩展方法

转载 作者:可可西里 更新时间:2023-11-01 09:06:03 28 4
gpt4 key购买 nike

我有一个包含一些用 C# 编写的扩展方法的类库和一个用 VB 编写的旧网站。

我想从 VB 代码调用我的扩展方法,但它们没有出现在智能感知中,并且当我访问该站点时出现编译错误。

我已经获得了所有必需的Import,因为包含在相同命名空间中的其他类在 Intelisense 中显示正常。

任何建议

编辑:更多信息以帮助发表评论。

我的实现是这样的

//C# code compiled as DLL
namespace x.y {
public static class z {
public static string q (this string s){
return s + " " + s;
}

}
}

我的用法是这样的

Imports x.y

'...'
Dim r as string = "greg"
Dim s as string = r.q() ' does not show in intelisense
' and throws error : Compiler Error Message: BC30203: Identifier expected.

最佳答案

虽然有一些怪癖,但它对我有用。首先,我创建了一个面向 .NET 3.5 的 C# 类库。这是项目中唯一的代码:

using System;

namespace ExtensionLibrary
{
public static class Extensions
{
public static string CustomExtension(this string text)
{
char[] chars = text.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
}

然后我创建了一个面向 .NET 3.5 的 VB 控制台应用程序,并添加了对我的 C# 项目的引用。我将 Module1.vb 重命名为 Test.vb,代码如下:

Imports ExtensionLibrary

Module Test

Sub Main()
Console.WriteLine("Hello".CustomExtension())
End Sub

End Module

这会编译并运行。 (我会调用 Reverse() 方法,但我不确定 VB 是否可能已经在某处神奇地拥有了反向能力——我根本不是 VB 专家。)

最初,我没有从 Intellisense 获得作为导入的 ExtensionLibrary。即使在构建之后,“Imports ExtensionLibrary”也是灰色的,并且一个灯泡提供了删除所谓的冗余导入的机会。 (这样做会破坏项目。)请注意,这可能是 ReSharper 而不是 Visual Studio。

长话短说,这是可以做到的,而且应该可以正常工作。我不认为问题是您使用的是旧版本的 VB,或者您的项目不是以 .NET 3.5 为目标?

如评论中所述:还有一个怪癖,即 extension methods won't be found when the compile-time type of the target is Object .

关于c# - 如何在 VB 代码中调用 C# 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/213045/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com