在c#初始化程序中,如果条件为false,我想不设置属性。
这样的事情:
ServerConnection serverConnection = new ServerConnection()
{
ServerInstance = server,
LoginSecure = windowsAuthentication,
if (!windowsAuthentication)
{
Login = user,
Password = password
}
};
可以做到吗? 怎么样?
答案 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;
}