[英]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,請執行此操作。
我認為您很快就會發現問題所在。 通常這是愚蠢的錯別字...
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.