C# 设置属性';使用速记样式初始化对象(ClientCredentials)期间的属性?

C# 设置属性';使用速记样式初始化对象(ClientCredentials)期间的属性?,c#,C#,当返回简单对象时,我习惯了下面的语法。它更容易、更短、更干净、更整洁 return Stuff{ Prop1 = "a", Prop2 = 5 }; 但是,由于某些原因,我无法以相同的方式实例化ClientCredentials。我想指定UserName属性,但intellisense只是给了我一个巨大的混乱列表,我不知道该怎么办。我要找的房子不在那里。我认为语法是推荐的和标准的。。。有什么好处 编辑: 我想使用以下语法: return ClientCredentials { UserN

当返回简单对象时,我习惯了下面的语法。它更容易、更短、更干净、更整洁

return Stuff{ Prop1 = "a", Prop2 = 5 };
但是,由于某些原因,我无法以相同的方式实例化
ClientCredentials
。我想指定
UserName
属性,但intellisense只是给了我一个巨大的混乱列表,我不知道该怎么办。我要找的房子不在那里。我认为语法是推荐的和标准的。。。有什么好处

编辑:

我想使用以下语法:

return ClientCredentials
{ 
  UserName.Password = "abc123",
  UserName.UserName = "server\\user"
};
而不是:

ClientCredentials clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = "server\\user";
clientCredentials.UserName.Password = "abc123";
return clientCredentials;
请参阅此处的MSDN文章

它说UserName属性是一个只有get访问器的属性。还有一个例子是如何设置它的值-你不能用initialzer来做这件事

编辑:在OP评论之后:
您不能在初始值设定项中设置属性的属性,您必须使用旧方法来设置
ClientCredentials.UserName
属性,这会使它有些混乱。但是,很容易将其封装到方法中:

ClientCredentials CreateClientCredentials(String userName, String password) {
  var clientCredentials = new ClientCredentials();
  clientCredentials.UserName.UserName = userName;
  clientCredentials.UserName.Password = password;
  return clientCredentials;
}
这种语法是不能更改的。
ClientCredentials
类和相关类型的设计如下

如果您真的想“修改”语法,一个选项是使用扩展方法创建一个流畅的API,在某些情况下,它允许您在代码中创建小型嵌入式DSL。对于这种特殊情况,我认为没有好的解决方案,但作为一种启发,我在这里提供了一些扩展方法:

public static class ClientCredentialsExtensions {

  public static ClientCredentials WithUserName(
    this ClientCredentials clientCredentials, String userName) {
    // Argument checking omitted.
    clientCredentials.UserName.UserName = userName;
    return clientCredentials;
  }

  public static ClientCredentials WithPassword(
    this ClientCredentials clientCredentials, String password) {
    // Argument checking omitted.
    clientCredentials.UserName.Password = password;
    return clientCredentials;
  }

}
然后您可以这样使用它:

var clientCredentials = new ClientCredentials()
  .WithUserName("username")
  .WithPassword("password");
但是,我认为没有比这更好的了:

var clientCredentials = new CreateClientCredentials("username", "password");

你能展示更多你想要做/完成的代码吗?
returnclientcredentials{UserName=}谢谢你重新格式化。我自己也看到了,所以我和你同时改变了它。我应该看一下预览…我想在
用户名
对象中设置
用户名
属性(我知道,它的名称很混乱)…您不能在初始值设定项中设置属性的属性,您必须用旧方法来设置它。。。我确实害怕但不想听的答案。。。将它设置为一个答案(最好是带有一些信息链接),这样我就可以绿色检查你了。无论如何,我不希望像那样运行初始值设定项,而不是使用专门的工厂方法和/或构造函数来显式地要求和处理它们。在上面的示例中,您将在创建
ClientCredentials
对象的任何位置复制用户名/密码分配,依赖于它们的
username
属性,如果需要,请记住同时分配用户名和密码。通过将这些作为字符串输入参数放置在构造函数/工厂方法中,所有这些都会消失。编辑:任何后续的重构、用法查找等都非常容易。这就是我在问题中所说的。我的问题是我更喜欢紧凑的即时创建和初始化风格。