【问题标题】:Rewrite some Javascript to C#将一些 Javascript 重写为 C#
【发布时间】:2017-12-25 12:31:58
【问题描述】:

我在这里找到了一段非常棒的代码 https://stackoverflow.com/a/45979883/9138729

我很难让它在我的 C# 表单应用程序中工作

function transposeChord(chord, amount) {
    var scale = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
    var normalizeMap = {
        "Cb": "B",
        "Db": "C#",
        "Eb": "D#",
        "Fb": "E",
        "Gb": "F#",
        "Ab": "G#",
        "Bb": "A#",
        "E#": "F",
        "B#": "C"
    };
    return chord.replace(/[CDEFGAB](b|#)?/g, function(match) {
        matchIndex = normalizeMap[match] ? normalizeMap[match] : match;
        var i = (scale.indexOf(matchIndex) + amount) % scale.length;
        if (i < 0) {
            return scale[i + scale.length];
        } else {
            return scale[i];
        }
        }
    );
}
  1. normalizeMap var 每行有 2 个选项(string[,]?)。
  2. C# 中的替换功能不适用于“(b|#)?/g”部分(我认为)
  3. 函数(匹配)存在于 C# 中?

或者我是否需要采用全新的方法来适应 C# 逻辑?

【问题讨论】:

  • C# 具有所有类似的构造,以便您能够转换此代码。 normalizeMap 将是 Dictionary&lt;string, string&gt;。替换为new Regex("[CDEFGAB](b|#)?").Replace(chord, match =&gt; { ... function here ...})
  • 但是,如果您仍然无法使用上述信息进行转换,请随时询问。
  • 感谢您的帮助,我已经解决了代码(对于任何想使用它的人,我已将其粘贴在上面)

标签: c# guitar


【解决方案1】:

代码解决:

        private string transposeChord(string ChordRegel, int amount)
    {
        string[] scale = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
        var normalizeMap = new Dictionary<string, string>() { { "Cb", "B" }, { "Db", "C#" }, { "Eb", "D#" }, { "Fb", "E" }, { "Gb", "F#" }, { "Ab", "G#" }, { "Bb", "A#" }, { "E#", "F" }, { "B#", "C" } };
        return new Regex("[CDEFGAB](b|#)?").Replace(ChordRegel, match =>
        {
        int i = (Array.IndexOf(scale, normalizeMap.ContainsKey(match.Value) ? normalizeMap[match.Value] : match.Value) + amount) % scale.Length;
            return scale[i < 0 ? i + scale.Length : i];
        });
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多