在我的计划中,我有一个TreeViewItem
,其Header
设置为数字integer
值。为了将Header
转换为直的int
值,我将其传递给名为getNumber
的函数。
我的getNumber
功能:
此功能来自this previously asked question。
//Gets the number contained in a Node's header
public static int getNumber(string parentNodeHeader)
{
int curNumber = 0;
Int32.TryParse(parentNodeHeader, out curNumber);
return curNumber;
}
我在程序的几个不同区域以相同的方式传递给此函数,但在其中一个区域string
未正确传递。在调试器中,它(parentNodeHeader
)显示"System.Windows.Controls.StackPanel"
,因为它是值而不是数字。我不知道为什么会这样。
对于函数的工作调用以及不工作的调用,我使用相同的代码。
int curNumber = getNumber(SelectedItem.Header.ToString());
为什么会发生这种情况?我该如何解决?
更新
通过添加此内容,我已将调用更改为getNumber
...
var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock
int curNumber = getNumber(selectedHeader.Text);
理论上这应该有效,但我得到InvalidCastException
,表示无法将StackPanel
强制转换为TextBlock
。 StackPanel
来自哪里......?
感谢您的帮助。
答案 0 :(得分:1)
我没有使用getNumber()
函数,而是使用Regex
从integer
中提取string
。
要使用Regex
,您需要加入System.Text.RegularExpressions;
然后你这样实现它:var data = Regex.Match(stringValue, @"\d+").Value;