Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在[]之间的某个位置获取字符串中的文本_C#_Wpf - Fatal编程技术网

C# 在[]之间的某个位置获取字符串中的文本

C# 在[]之间的某个位置获取字符串中的文本,c#,wpf,C#,Wpf,我正在用WPF做一个吉他编曲程序,我想在鼠标悬停时显示相应的和弦。(在消息框中即可) 我已经在一个名为:cursorPos的Int中设置了光标位置,它返回字符串中悬停字母位置的编号 我的问题是我需要整个和弦在[和]之间 我的字符串看起来是这样的:string myString=“[Em]我已经做了一个很长时间的程序员了。” 在这种情况下,19、20或21的“cursorPos”将给我[C] 顺便说一句,和弦可以有从1到10的字母(如[G#m9(maj7)]首先,您需要找到所有和弦实例(即字符串中

我正在用WPF做一个吉他编曲程序,我想在鼠标悬停时显示相应的和弦。(在消息框中即可)

我已经在一个名为:cursorPos的Int中设置了光标位置,它返回字符串中悬停字母位置的编号

我的问题是我需要整个和弦[和]之间

我的字符串看起来是这样的:
string myString=“[Em]我已经做了一个很长时间的程序员了。”

在这种情况下,19、20或21的“cursorPos”将给我[C]


顺便说一句,和弦可以有从1到10的字母(如[G#m9(maj7)]首先,您需要找到所有和弦实例(即字符串中
[
]
之间的子串)。有无数种方法可以做到这一点,这是一个这样的例子,适合您的情况。当然,这是假设没有嵌套的括号

首先,我用一个类来控制你的每个和弦。
IsInRange()
方法将告诉您和弦是否位于传递给它的光标位置

public class Chord
{
    public string Value { get; set; }
    public int Start { get; set; }
    public int End { get; set; }
    public bool IsInRange(int cursorPos)
    {
        return cursorPos >= Start && cursorPos <= End;
    }
}
让我们看看光标位置19是否返回任何内容

var chordAt19 = chords.FirstOrDefault(x => x.IsInRange(19));
因为我们确实有一个19的和弦,它将返回它。
如果没有(例如,如果我们将12传递给它),它将返回null。

您尝试了什么?你收到错误了吗?我的第一种方法是回顾和展望标记([和]),通过这些索引,你可以轻松地得到它们之间的任何东西(不管长度),这个解决方案似乎总是返回“GuitarMate.Editor+Chord”,我不知道为什么
string myString = "[Em] I've been a m[C]iner for a h[D]eart of g[G#m9(maj7)]old.";
var chords = GetChords(myString);
var chordAt19 = chords.FirstOrDefault(x => x.IsInRange(19));