int.Parse(e.CommandArgument.ToString())无输出?chooseID调试无显示求助
嘿,我一眼就看出问题啦——你误用了Debug.WriteLine的重载方法,导致chooseID的数值没被正确输出。
为啥会这样?
先看你代码里的这行:
System.Diagnostics.Debug.WriteLine("chooseID", chooseID);
这里调用的是格式化字符串重载:Debug.WriteLine(string format, params object[] args)。你把"chooseID"当成了描述文本,但这个重载里第一个参数是格式模板,而你的模板里没有占位符(比如{0}),所以第二个参数chooseID直接被忽略了,只会输出"chooseID"这几个字,完全不会显示变量的值。
反观你之前的那行代码:
System.Diagnostics.Debug.WriteLine("e.CommandArgument.ToString()", e.CommandArgument.ToString());
这行能正常输出值,是因为两个参数都是字符串,匹配的是Debug.WriteLine(string message, string category)重载,输出格式是"category: message",所以你才会看到类似e.CommandArgument.ToString(): 4的结果。
几种正确的写法
你可以选下面任意一种写法来输出chooseID的数值:
推荐:用格式化字符串:给描述文本加上占位符,把变量值插进去,清晰直观:
System.Diagnostics.Debug.WriteLine("chooseID: {0}", chooseID);这样会输出
chooseID: 4(假设chooseID的值是4)。用类别重载(交换参数):如果你想保留「类别+值」的输出格式,要把变量放在第一个参数,类别文本放第二个:
System.Diagnostics.Debug.WriteLine(chooseID, "chooseID");输出结果也是
chooseID: 4。直接拼接字符串:把描述和变量值拼接成一个字符串传入:
System.Diagnostics.Debug.WriteLine("chooseID: " + chooseID);这种写法也能正常输出,但格式化字符串的方式在输出多个变量时会更灵活。
要是你只想看变量值,甚至可以直接写:
System.Diagnostics.Debug.WriteLine(chooseID);
这样会直接输出4,没有前缀描述。
内容的提问来源于stack exchange,提问作者Hoàng Hiệp

