C# 4.0 字符串连接问题#

C# 4.0 字符串连接问题#,c#-4.0,C# 4.0,我在研究三层架构。我需要通过业务层将数据访问层中的服务器名称从UI传递到数据访问层。为了传递值,我使用了属性,并且在数据层中成功地获得了值。但是,当我尝试连接字符串以生成数据库连接的数据源时,它传递空值 我的代码: public class dataLayer: IDisposable { private string serverName; private string name; private string ceConnString; public str

我在研究三层架构。我需要通过业务层将数据访问层中的服务器名称从UI传递到数据访问层。为了传递值,我使用了属性,并且在数据层中成功地获得了值。但是,当我尝试连接字符串以生成数据库连接的数据源时,它传递空值

我的代码:

public class dataLayer: IDisposable
{
    private string serverName;
    private string name;
    private string ceConnString;

    public string ServerName 
    {
        get { return serverName; }
        set { serverName = value; }
    }

    public dataLayer()
    {
        //First Try - Using Simple Concatination
        name = @"\\" + ServerName + @"\foldername\Database.sdf;";
        //result - name = \\\\\\foldername\Database.sdf

        //Second Try - Using String Builder
        StringBuilder build = new StringBuilder();
        build.Append("\\\\");
        build.Append(ServerName);
        build.Append("\\foldername\\Database.sdf;");
        string namebuilder = build.ToString();
        //result - namebuilder = \\\\\\foldername\Database.sdf

        //Third Try - Using Path
        string line = Path.Combine("\\\\", ServerName, \\foldername\\Database.sdf;");
        //result - line = \\\\\\foldername\Database.sdf

        ceConnString = "data source=" + name;
    }

我希望输出为\\server name\foldername\Database.sdf

调用类的构造函数时,实例属性ServerName仍处于其默认值(null),您需要以这种方式更改构造函数

public dataLayer(string serverName)
{
    this.ServerName = serverName;

    name = @"\\" + ServerName + @"\foldername\Database.sdf;";
    ....

}
dataLayer dl = new dataLayer(yourServerName);
这样叫你们班

public dataLayer(string serverName)
{
    this.ServerName = serverName;

    name = @"\\" + ServerName + @"\foldername\Database.sdf;";
    ....

}
dataLayer dl = new dataLayer(yourServerName);

虽然您可能需要使用string.Format,但我认为使用Path类构建路径更为简洁。你几乎可以使用它,但是你得到了额外的,因为你没有预料到额外的路径。在段之间合并插入。尝试以下方法(在单元测试中):


您在哪里初始化
ServerName
?为什么在尝试1和尝试2之间使用并拒绝
@“
?或者这只是在尝试中?简单的连接是可以的,没有额外的上下文。但是,如果在简单连接的背景下发生的多字符串构造可能会导致效率低下,建议使用
StringBuilder
String.Format
。上面是:
String.Format(@“\\{0}\foldername\Database.sdf”,ServerName)有没有办法在没有constructor@CodeBeard错。只有当您不知道要连接多少字符串时,StringBuilder才有意义。对于3个串联,使用简单+运算符或字符串更有效。Concat@Steve-OK。我可以接受在“上下文无关”的场景中,^5您的string.Concat建议-我学到了一些东西。你会接受一个
String.Format
版本作为一个有效的选项,至少在清晰性方面是这样吗?@CodeBeard我喜欢String.Format,我经常使用它来进行同样的推理“为了清晰”,但请记住,关于效率的观察是有效的。然而,在这个微观环境中,我更喜欢清晰而不是效率。我认为这里应该对隐含的测试驱动方法进行评论@user1665570-在这些场景中使用TDD确实有帮助。它将暴露您的耦合以及为什么
ServerName
是一个依赖项。实际上,我不能使用AreEqual方法,因为我将获得不同的服务器名称。我正在通过网络远程连接它。@user1665570您的单元测试应该明确给出必要的上下文或模拟。因此,您可以单独测试代码的功能,而不需要网络。这就是我想确认我的逻辑是否有效的方式。如果愿意,可以在调试器中简单地检查unc变量。