Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中从单独文件夹中的文件导入名称空间#_C#_Namespaces_Using - Fatal编程技术网

C# 如何在C中从单独文件夹中的文件导入名称空间#

C# 如何在C中从单独文件夹中的文件导入名称空间#,c#,namespaces,using,C#,Namespaces,Using,当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域 当StringHandler.cs位于Product文件夹中时,我可以使用实用程序包含位于Product.cs中,但是当它位于项目文件夹旁边的单独文件夹中时(在实用程序文件夹中),我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗?例如,using在我的文件系统上真正指向哪里(我需要指定相对于我的csproj文件或我的CallCenter.sln文件的using目录吗?) String

当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域

StringHandler.cs
位于
Product
文件夹中时,我可以使用实用程序包含
位于
Product.cs
中,但是当它位于
项目
文件夹旁边的单独文件夹中时(在
实用程序
文件夹中),我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗?例如,
using
在我的文件系统上真正指向哪里(我需要指定相对于我的
csproj
文件或我的
CallCenter.sln
文件的using目录吗?)

StringHandler.cs

namespace Utilities
{
    public static class StringHandler
    {
        public static string InsertSpaces(this string source)
        {
            string result = string.Empty;

            if (!string.IsNullOrWhiteSpace(source))
            {
                foreach (char letter in source)
                {
                    if (char.IsUpper(letter))
                    {
                        result = result.Trim();
                        result += " ";
                    }
                    result += letter;
                }
            }
            return result.Trim();
        }
    }
}

编译期间,
.cs
文件所在的文件夹没有意义。
using
语句只允许找到特定命名空间中的类型。要能够使用扩展方法,请确保:

  • 包含名称空间(
    使用实用程序;
  • 文件(
    StringHandler.cs
    )包含在您的项目或当前项目引用的其他项目中
当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域

定义文件的位置与文件夹无关。按照惯例,磁盘上的文件夹结构模仿名称空间,但不一定非得如此。使用
会将类型“带”到命名空间中。(不是真正的“带来”——更像是“提供给”)

只要源类型对目标项目中的命名空间可用,它就必须通过

  • 从目标项目直接引用源项目
  • 直接引用目标项目中的源NuGet包
  • 通过目标项目中另一个项目的可传递依赖关系间接引用源项目
  • 通过另一个项目或目标项目的NuGet包的可传递依赖项间接引用源NuGet包
逻辑上

  • 对源类型使用
    语句的
当StringHandler.cs位于产品文件夹中时,我可以包括使用实用程序;在Product.cs中,但当它与项目文件夹(在Utilities文件夹中)一起位于单独的文件夹中时,我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗

您不能使用
使用
访问
StringHandler
,因为您当前已定义了结构。原因是
StringHandler
不是任何项目的一部分。因为它不是任何项目的一部分,它违反了我上面列出的规则

要按预期使用
,您有两个简单的选择:

  • StringHandler
    直接添加到需要它的项目中,或者如果希望
    StringHandler
    分开,请将它添加到另一个项目中,并从目标项目中引用该项目
  • 再多花点功夫,将
    StringHandler
    放在它所在的位置(无项目),并在目标项目中包含指向该文件的链接。这有点作弊:它使它看起来像
    StringHandler
    一直在
    Project
    中。这种情况很少见;我个人只在我想包括,例如,公共程序集属性,而不是公共代码时才这样做
例如,在我的文件系统上,using真正指向的是哪里(我需要指定相对于我的csproj文件或CallCenter.sln文件的using目录吗?)


同样,忘记目录/文件夹/磁盘结构。只考虑解决方案中的物理引用(基于project/NuGet)和逻辑引用(基于命名空间)。它们通常与目录/文件夹/磁盘匹配,但不一定要匹配。

或者在当前项目引用的另一个项目中。这是否意味着我需要在
Utilities
文件夹中
dotnet新控制台
,并在
Project
文件夹的
Project.csproj
文件中包含
StringHandler.cs
include
指令,除非你想把这些实用程序放在一个单独的dll中。我想把它们放在一个单独的dll中。但是将它们保存在单独的dll中有意义吗?我希望将实用程序方法和扩展方法与业务逻辑分开存储,我发现将它们分开有助于增加心理障碍。我完全按照我上面提到的做了,而且没有任何问题。看起来csproj文件是关键。只要在那里指定了它们的位置,其他一切都应该正常(包括名称空间)。我在Project.csproj中做了以下操作:
为此,您需要创建一个单独的库项目,并在需要的任何地方引用此项目,添加项目引用,这将允许使用包含项目名称空间的
using
,如果您有一系列相关功能,将它们放在一个单独的dll中以供重用肯定是有意义的(例如,看看(不是我的项目),一个包含与扩展方法类似的各种功能的dll)。您必须将cs添加到项目中。using语句是库名称,与文件所在的路径无关。要使用VS菜单将cs文件添加到项目中,请执行以下操作:项目:添加现有项:浏览cs文件。添加文件后,您可以将名称空间添加到其他模块。
namespace Utilities
{
    public static class StringHandler
    {
        public static string InsertSpaces(this string source)
        {
            string result = string.Empty;

            if (!string.IsNullOrWhiteSpace(source))
            {
                foreach (char letter in source)
                {
                    if (char.IsUpper(letter))
                    {
                        result = result.Trim();
                        result += " ";
                    }
                    result += letter;
                }
            }
            return result.Trim();
        }
    }
}