C#初始化条件赋值

时间:2010-07-12 13:54:13

标签: c# initializer

在c#初始化程序中,如果条件为false,我想不设置属性。

这样的事情:

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    if (!windowsAuthentication)
    {
        Login = user,  
        Password = password  
    }
};

可以做到吗? 怎么样?

6 个答案:

答案 0 :(得分:27)

初始值不可能;你需要单独if声明。

或者,您也可以写

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,  
    Password = windowsAuthentication ? null : password
};

(取决于ServerConnection班级的工作方式)

答案 1 :(得分:12)

你不能这样做; C#初始值设定项是名称=值对的列表。有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic5

您需要将if块移动到以下行。

答案 2 :(得分:6)

我怀疑这会起作用,但是这样使用逻辑会破坏使用初始化程序的目的。

ServerConnection serverConnection = new ServerConnection()  
{  
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,
    Password = windowsAuthentication ? null :password
};

答案 3 :(得分:4)

注意:我不推荐这种方法,但如果必须在初始化程序中完成(即你使用的是LINQ或其他必须是单个语句的地方),可以用这个:

ServerConnection serverConnection = new ServerConnection()
{
    ServerInstance = server,  
    LoginSecure = windowsAuthentication,  
    Login = windowsAuthentication ? null : user,
    Password = windowsAuthentication ? null : password,   
}

答案 4 :(得分:3)

正如其他人所提到的,这不能在初始化器中完成。是否可以将null分配给属性而不是根本不设置它?如果是这样,您可以使用其他人指出的方法。这是一个替代方案,可以完成您想要的并仍然使用初始化语法:

ServerConnection serverConnection;
if (!windowsAuthentication)
{
    serverConection = new ServerConnection()
    {
        ServerInstance = server,
        LoginSecure = windowsAuthentication,
        Login = user,
        Password = password
    };
}
else
{
    serverConection = new ServerConnection()
    {
        ServerInstance = server,
        LoginSecure = windowsAuthentication,
    };
}

在我看来,它并不重要。除非您处理匿名类型,否则初始化器语法只是一个很好的功能,可以使您的代码在某些情况下看起来更整洁。我会说,如果它牺牲了可读性,不要用它来初始化你的所有属性。改为执行以下代码没有错:

ServerConnection serverConnection = new ServerConnection()  
{
    ServerInstance = server,
    LoginSecure = windowsAuthentication,
};

if (!windowsAuthentication)
{
    serverConnection.Login = user,
    serverConnection.Password = password
}

答案 5 :(得分:1)

这个怎么样:

ServerConnection serverConnection = new ServerConnection();  

serverConnection.ServerInstance = server;  
serverConnection.LoginSecure = windowsAuthentication;

if (!windowsAuthentication)
{
     serverConnection.Login = user;  
     serverConnection.Password = password;  
}