在C#中使用结构的正确方法

时间:2017-10-17 20:42:13

标签: c# struct

我正在尝试处理一个简单的结构。所有我需要在结构中拥有所有变量,这些变量稍后将用作连接字符串。我不打算为列出的变量分配任何新值。我知道如何对类做同样的事情,但现在我想发现如何使用结构。此外,我不需要在构造函数中使用这些参数字符串p1等但没有它们,我收到一个错误。请帮忙)

public struct ConnectionString
{
    // vars declaration
    public string ip, login, password;

    // struct constructor
    public ConnectionString(string p1, string p2, string p3)
    {
        ip = "192.168.1.1";
        login = "boris";
        password = "123456";
    }
}

但是当我打电话给它时,我的输出空了:

ConnectionString ss = new ConnectionString();
Console.WriteLine("connection string: " + ss.password);

3 个答案:

答案 0 :(得分:2)

// struct constructor
public ConnectionString(string p1, string p2, string p3)
{
    ip = "192.168.1.1";
    login = "boris";
    password = "123456";
}
     

但是当我打电话给它时,我的输出空了:

ConnectionString ss = new ConnectionString();
Console.WriteLine("connection string: " + ss.password);

您没有调用您定义的构造函数;你正在调用隐式生成的默认构造函数,这就是没有填充任何字段的原因。

编辑:从documentation,请注意以下内容:

  

在结构声明中,除非将字段声明为const或static,否则无法初始化字段。

选项:

1)删除你的构造函数并声明字段const并提供值,即

public struct ConnectionString
{
    // vars declaration
    public const string ip = "192.168.1.1";
    public const string login = "boris";
    public const string password = "123456";
}

2)在调用默认构造函数

后填充这些字段

3)调用你定义的构造函数(带参数),

4)(最佳选择)不使用结构来解决这个问题。

参考:Using Structs (C# Programming Guide)

答案 1 :(得分:0)

而不是:

public ConnectionString(string p1, string p2, string p3) .....

使用:

public static ConnectionString Create()
{
    return new ConnectionString { ip = "a", login = "b", password = "c" };
}

并使用:

ConnectionString ss = ConnectionString.Create();

这假设您必须完全使用结构。

答案 2 :(得分:0)

由于您没有使用在其中的构造函数中传递的参数,因此您可以调用它,如下所示。 As others have already commented, getting connection string is not something, you should do with struct.结构通常在集体使用一组相关参数和功能时使用,并且可用于较小的调用范围。它们是按值传递的,而不是通过引用传递的。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>


<nav id="mainNav" class="navbar navbar-default navbar-custom navbar-fixed-top">
  <div class="container">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header page-scroll">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
        <span class="sr-only">Toggle navigation</span> Menu <i class="fa fa-bars"></i>
      </button>
      <a class="navbar-brand page-scroll" href="#page-top"><img src="img/abc.png" alt="logo" width="72" height="68" id="logo">
      </a>
    </div>
    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav navbar-right">
        <li class="hidden">
          <a href="#page-top"></a>
        </li>
        <li>
          <a class="page-scroll" href="#services">services</a>
        </li>
        <li>
          <a class="page-scroll" href="#portfolio">portfolio</a>
        </li>
        <li>
          <a class="page-scroll" href="#portfolio_sectors">Sectors</a>
        </li>
        <li>
          <a class="page-scroll" href="#my_carousel">References</a>
        </li>
        <li>
          <a class="page-scroll" href="#about">About</a>
        </li>
        <li>
          <a class="page-scroll" href="#team">Team</a>
        </li>
        <li>
          <a class="page-scroll" href="#contact">Contact</a>
        </li>
      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </div>
  <!-- /.container-fluid -->
</nav>