.net - VB.NET 和 System.Linq.Dynamic 命名空间

标签 .net vb.net namespaces dynamic-linq

我会使用System.Linq.Dynamic .

我添加了指定的Dynamic.vb 文件,其开头如下:

Option Strict On
Option Explicit On

Imports System.Collections.Generic
Imports System.Text
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Threading
Imports System.Runtime.CompilerServices

Namespace System.Linq.Dynamic
  Public Module DynamicQueryable

到我的 (VB.NET) 解决方案。

现在 Visual Studio 不再识别项目文件中的 System.XXX 引用,建议我将它们更改为 Global.System.XXX enter image description here

Das 是什么,如何管理它?

最佳答案

看起来好像正在发生一些命名空间隐藏。在 VB.NET 项目中,存在一个根命名空间,默认情况下该命名空间设置为您的项目名称。您可以从项目 -> 属性 -> 应用程序 -> 根命名空间进行检查。

当类显式指定 namespace 时,根 namespace 将作为其前缀。例如,假设您的根命名空间是 RootNs。由于DynamicLinq.vb 文件指定System.Linq.Dynamic 命名空间,这实际上是RootNs.System.Linq.Dynamic。这会隐藏常规 .NET System 命名空间,这就是 Visual Studio 提示您为所有命名空间添加 Global 前缀的原因。

值得注意的是,在 C# 中这个概念是不同的,所以我不认为当有人使用 C# 版本的 DynamicLinq 时会出现这个问题。

要解决此问题,您有几个选项(选择一个):

  1. DynamicLinq.vb 中删除命名空间声明,并从该文件内使用 System.Linq.Dynamic 的对象中删除所有完整限定条件。换句话说,System.Linq.Dynamic.Signature 变为Signature。要在其他地方使用它,请添加 Imports System.Linq.Dynamic

  2. 将根命名空间从“项目/属性/应用程序”中删除,并将其设置为空白。通过这样做,您的项目将更像 C#,并且您应该在所有类中显式指定 namespace 。要在其他地方使用它,请添加 Imports System.Linq.Dynamic

  3. 保留根命名空间,仅更改 DynamicLinq.vb 的命名空间。例如,将其更改为 NewNs.Linq.Dynamic 并像以前一样从 Signature 中删除完整限定条件。要在其他地方使用它,请添加 Imports RootNs.NewNs.Linq.Dynamic(注意 RootNs 前缀)。

关于.net - VB.NET 和 System.Linq.Dynamic 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030685/

相关文章:

.net - string.empty 和 isNullOrEmpty 之间的区别?

javascript - 保持子 Gridview 在回发时展开

html - 使用 mvc 3 razor vb.net 在新的浏览器窗口中返回文件

asp.net - Asp CheckBoxList 中的多个数据字段?

Python:如何访问外部类命名空间

namespaces - Web Worker importScripts 无法将脚本变量置于全局范围内

c# - DateTime 的 ToLongString 方法不返回日期名称

c# - 如何知道 File.Copy 成功了?

.net - 使用鼠标作为位置传感器

node.js - socketio Node 为另一个命名空间发出