簡體   English   中英

c#main方法忽略字符串變量

[英]c# main method ignores string variables

我得到了一個小的C#項目來編寫,該項目基本上是在控制台應用程序中包裝一些dll。

我遇到了我認為很奇怪的問題。 我已經在要使用的main方法中聲明了幾個局部變量。 這個想法是,當解析參數時,它們的值存儲在這些變量中(參數在鍵對中,例如-u:username)。

下面是我用來啟動該過程的代碼。

namespace ziptogo
{
public class ZipToGo
{


    public static void Main(string[] args)
    {

        string user = null;
        int divisionid = 0;
        string mysqlServer = null;
        string mysqlName = null;
        string mysqlUser = null;
        string mysqlPwd = null;
        string barcode = null;
        bool zipped = false;

        ZipToGo ziptogo = new ZipToGo();

        if (args.Length == 0)
        {
            ziptogo.usage();
        }

        //we look throught the arguments and extract the values.
        for (int i = 0; i < args.Length; i++)
        {

            string[] values = ziptogo.getArgValue(args[i]);

            if (values[0].Equals("-U") || values[0].Equals("-u"))
            {
                user = values[1];
            }

            if (values[0].Equals("-D") || values[0].Equals("-d"))
            {
                divisionid = Int32.Parse(values[1]);
            }
....

當我剛開始使用C#編寫代碼時,我是否會丟失一些顯而易見的信息,說明為什么main方法會忽略諸如mysqlServer之類的字符串?

整數dividid和字符串條形碼是該方法唯一不會忽略的變量。

謝謝。

為了快速測試,您可以在Main()之后添加以下行:

 args = new String[] { "-u:username" };

然后使用調試器逐步執行代碼。

[編輯]如果getArgValue看起來像這樣:

 public String[] getArgValue(String s)
 {
     return s.Split(':'); 
 }

那么它應該可以工作,恕我直言(快速又臟,只是為了使其運行)。

[編輯:]有一些不錯的命令行解析解決方案,不需要添加所有這些條件,例如http://www.codeproject.com/KB/recipes/commandlineparser.aspx

您了解調試器嗎?

如果您使用Visual Studion,請執行此操作。

  1. 將插入符號設置為字符串user = null;
  2. 單擊F9(切換斷點);
  3. 單擊F5(Strat調試);
  4. 單擊F10以瀏覽您的應用程序;

我認為您很快就會發現問題所在。 通常這是愚蠢的錯別字...

getArgValue(string [])有什么作用?

我敢打賭,如果你願意...

public static void Main(string[] args)    
{  
    if ( args.Length > 0 )
        System.Diagnostics.Debug.WriteLine( args[0] );

/* etc */

}

您會看到丟失的“ -d”。

看一下這段代碼,看看是否有幫助。 它應該完全按照您想要的去做,而且有點干凈。

string[] args = new string[] {"-u:username", "-dbs:servername", "-dbu:dbuser", "-dbp:dbpassword"};

string user = null;
int divisionid = 0;
string mysqlPwd = null;

foreach (string arg in args)
{
    string[] parts = arg.Split(':');

    switch (parts[0].ToUpper())
    {
        case "-U":
            user = parts[1];
            break;
        case "-D":
            divisionid = Int32.Parse(parts[1]);
            break;
        case "-DBP":
            mysqlPwd = parts[1];
            break;
            // ....
        default:
            // Display usage
            break;
    }
}

Debug.WriteLine(string.Format("User {0} | Password {1}", user, mysqlPwd));

顯然,args部分應該來自命令行,而不是硬編碼的。

暫無
暫無

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

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