簡體   English   中英

新手C#我可以從私有布爾返回結果值以使其成為const字符串嗎?

[英]Newbie C# Can I return result value from private bool to make as const string?

我可以將bool的值結果轉換為const字符串嗎?

public const string MState = "";

這是我的代碼:

private bool GetStateByZipCode(string ZipOrPostalCode, string ST)
{
    try
    {
        string strServerName = ConfigurationManager.AppSettings["ServerName"];

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyNGConnect_ConnectionString"].ToString());
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "ngc_GetStateByZipCode";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ZipOrPostalCode", ZipOrPostalCode);
        cmd.Parameters.AddWithValue("@ST", ST);
        SqlDataReader reader = storedProcCommand.ExecuteReader();
        {
            while (reader.Read())
            {
                if (reader["ZipOrPostalCode"].ToString().Equals(ZipOrPostalCode) &&
                      reader["ST"].ToString().Equals(ST))
                {
                    ST = true;
                    break;
                }
            }
            con.Close ();
            reader.Close ();

            return ST;
        }
    }
    finally
    {

    }

const不是變量,因此名稱為Constant 您不能在運行時為const賦值。

我認為您正在尋找的是兩部分...第一部分是每個人都在告訴您...不,如果沒有一些非常差勁的編碼實踐,您就無法在代碼編譯后執行const字符串。 我不收集您真正要問的問題。 我認為您真正要問的是:是否可以將此方法的返回值(或ST(如果您將方法更改為返回字符串)轉換為字符串)。 答案是肯定的。 只需在var上使用ToString()即可。

例...

GetStateByZipCode("something", "something").ToString();

你不能這樣做。 由於常量變量不變,因此無法在運行時定義它們。 常數值只能在編譯時定義。 另外,我不建議將bool存儲在字符串中。 堅持正確的數據類型是一種好習慣。

我認為您真正想要的是...

首先,您不能將運行時值存儲在const

因此,更改您的聲明:

public string MState;

然后,您不想在方法上返回bool ,而是返回string

注意:我添加一些using語句來清理此問題,但這遠非完美。

private string GetStateByZipCode(string ZipOrPostalCode, string ST)
    {
        try
        {
            string strServerName = ConfigurationManager.AppSettings["ServerName"];

            using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyNGConnect_ConnectionString"].ToString()))
            using (var cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = "ngc_GetStateByZipCode";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@ZipOrPostalCode", ZipOrPostalCode);
                cmd.Parameters.AddWithValue("@ST", ST);
                using (SqlDataReader reader = storedProcCommand.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        if (reader["ZipOrPostalCode"].ToString().Equals(ZipOrPostalCode) &&
                            reader["ST"].ToString().Equals(ST))
                        {
                            return ST;
                        }
                    }

                }
            }
            finally
            {

            }
        }
    }

然后像下面這樣分配MState的值:

MState = GetStateByZipCode(zipCode, state);

如前所述, const不是變量,其值在編譯時定義。 但是,您可以做的是定義一個只讀屬性,該屬性的值在其類的范圍內定義。 在這種情況下,只有該類才能操作它,並且該屬性在其他任何地方都像只讀屬性(您想要的是什么,而不是const)一樣起作用。

假設我了解您要執行的操作,則可以這樣完成:

class Address
{
  private string _state;  // the _state field 
  public string State// the State property
  {
    get
     {
        return _state;
     }
  }
  private void SetState()
  {
      if(GetStateByZipCode(string ZipOrPostalCode, string ST))
        {
           _state = "ST";
        }
      else
        {
            _state = "Not ST";
        }
  }

} 

您可以在其他地方使用如下所示的readonly屬性:

class OtherClass
{
   Address add = new Address();
   add.SetState();
    //Prints the value assigned to State in Class Address
   Console.Println(add.State);

   //cannot do this
   add.State = "Some Value";

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM