Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#_If Statement_Optimization - Fatal编程技术网

C# 脚本优化#

C# 脚本优化#,c#,if-statement,optimization,C#,If Statement,Optimization,我正在为一个名为Livesplit的程序开发一个自动拆分器。 它用于speedrunning,通过创建AutoSpliter,您可以监视内存地址,以便在值更改时通知应用程序执行操作 它使用的是C#,所以施点魔法应该不会有问题 我是一个完全的编程高手,几乎没有编程经验。 我不知道如何优化这段代码,所以它首先看起来不坏,其次是应用本身没有问题 现在,我的代码看起来像这样,但它是可怕的 state("GoingDown", "v1") { int Loading : "GoingDown.ex

我正在为一个名为Livesplit的程序开发一个自动拆分器。 它用于speedrunning,通过创建AutoSpliter,您可以监视内存地址,以便在值更改时通知应用程序执行操作

它使用的是C#,所以施点魔法应该不会有问题

我是一个完全的编程高手,几乎没有编程经验。 我不知道如何优化这段代码,所以它首先看起来不坏,其次是应用本身没有问题

现在,我的代码看起来像这样,但它是可怕的

state("GoingDown", "v1")
{
    int Loading : "GoingDown.exe", 0x6874EC;
    string30 LevelFirst : "GoingDown.exe", 0x263E28;
    string30 LevelSecond : "GoingDown.exe", 0x263E37;
    string15 Cutscene : "GoingDown.exe", 0x26B543;
}

state("GoingDown", "v2")
{
    int Loading : "GoingDown.exe", 0x6874EC;
    string30 LevelFirst : "GoingDown.exe", 0x263E40;
    string30 LevelSecond : "GoingDown.exe", 0x263E4F;
    string15 Cutscene : "GoingDown.exe", 0x26B55B;
}

init
{
    if (modules.First().ModuleMemorySize == 0x79A726)
        version = "v1";
    else if (modules.First().ModuleMemorySize == 0x79B000)
        version = "v2";
}

start
{
    //return (old.Level == "M00_CIV_Intro_1" && current.Level == "M01_HOO_Tranes_Hood_1" && current.Loading != 0);
    return (current.LevelFirst.Equals("M01_HOO_Tranes_Hood_1") && current.Loading != 0 && old.Loading == 0 || current.LevelSecond.Equals("M01_HOO_Tranes_Hood_1") && current.Loading != 0 && old.Loading == 00);
}

split
{
    if (old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) || old.LevelSecond.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase))
        return true;

    //if (old.LevelSecond.Equals("M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase))
    //  return true; (CUTSCENE NO NEED TO SPLIT)

    if (old.LevelSecond.Equals("M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase))
        return true;

    //if (old.LevelSecond.Equals("M06_IND_Bulletproof_0") && current.LevelSecond.Equals(":M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase))
    //  return true; (CUTSCENE NO NEED TO SPLIT)

    if (old.LevelSecond.Equals("m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase))
        return true;

    //if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_0") && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase))
    //  return true; (CUTSCENE NO NEED TO SPLIT)

    if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase))
        return true;

    //if (old.LevelSecond.Equals("m08_hoo_remember_alamo_0") && current.LevelSecond.Equals(":m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase))
    //  return true; (CUTSCENE NO NEED TO SPLIT)

    if (old.LevelSecond.Equals("m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase))
        return true;

    if (old.LevelSecond.Equals("M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase))
        return true;

    // NOT SURE IF IT WORKS
    //if (old.LevelSecond.Equals("M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
    //  return true; 

    // Final split
    if (current.Cutscene.Contains("M11_010") && current.Cutscene != old.Cutscene)
        return true;
}

isLoading
{
    return (current.Loading == 0);
}

我不知道如何处理这么多if语句。也许把它放在字典里?但是我不知道该怎么做。

您正在将
old.LevelFirst
old.LevelSecond
与许多静态值进行比较,并进行不区分大小写的比较。为什么不在
split
方法的顶部,获取这些值的本地小写副本:

var first = old.LevelFirst.Lower();
var second = old.LevelSecond.Lower();
这使得比较更容易,如下所示:

if(first == "..." || first == "..." || first == "..." || ...)
    return true;
接下来,我想你有一个bug。您的if声明中说:

if(first == "xxxx" && second == "yyyy" || second == "zzz")
    return true;
如果
second==“zzz”
的优先级低于
&
,则无论
first
的值如何,此语句都将返回true。你需要在你的
第二个
比较周围放上括号,即

if(first == "xxxx" && (second == "yyyy" || second == "zzz"))
    return true;
下一步,看一下对第一级使用
switch
语句,而不是
if
语句(确保与之比较的值为小写:

switch(first)
{
    case "m01_hoo_tranes_hood_1" :
        return 
            (second == ":m01_hoo_tranes_hood_1") ||
            (second == "m01_hoo_tranes_hood_1") ||
            (second == ":m01_hoo_tranes_hood_1");

    case "m01_hoo_tranes_hood_1" :
       .....
}
这是一个逻辑变化-我假设如果
first
m01\u hoo\u tranes\u hood\u hood\u hood\u 1
但不是任何
second
值,那么逻辑将一直下降到最后并返回false。您的
if
逻辑可以允许相同的
first
值在以后匹配,并具有不同的逻辑但无论如何,这可以纳入上述案例陈述中

最后,查看变量值。冒号
前缀是否相关,还是“它们可能在那里,因此我需要检查两者”?如果是,请返回这两个
var first=/var=second=
语句,并删除
前缀,这将减少比较:

if(first.StartsWith(":"))
    first = first.Substring(1); // Remove first character
现在,您不需要在所有比较中包含冒号前缀

谢谢,
Chris

据我所知,你可以通过执行以下操作来削减大量代码

 Func<string,string,bool>  eq = (a,b) => a.Equals(b, StringComparison.OrdinalIgnoreCase);

    var levels = new string[] 
    {
       "M01_HOO_Tranes_Hood_1",
       "M01_HOO_Tranes_Hood_1a",
       "M01_HOO_Tranes_Hood_2",
       "M01_HOO_Tranes_Hood_3",
       "M01_HOO_Tranes_Hood_4",
       "M02_HOO_Subway_1a",
       "M02_HOO_Subway_1b",
       "m02_hoo_subway_2",
       "m02_hoo_subway_3",
       "m03_hoo_whos_got_beef_1",
       "m03_hoo_whos_got_beef_2",
       "m03_hoo_whos_got_beef_3",
       "m03_hoo_whos_got_beef_4",
       "M04_HOO_Subway_layup_1a",
       "M04_HOO_Subway_layup_1b",
       "M04_HOO_Subway_layup_2",
       "M05_HOO_Battle_1",
       "M05_HOO_Battle_3",
       "m06_ind_bulletproof_1",
       "m06_ind_bulletproof_2",
       "M06_IND_Bulletproof_3",
       "M07_HOO_Blind_Justice_1",
       "M07_HOO_Blind_Justice_2",
       "M07_HOO_Blind_Justice_3",
       "m08_hoo_remember_alamo_1",
       "m08_hoo_remember_alamo_2",
       "M08_HOO_Remember_Alamo_3",
       "M09_CIV_Cat_and_Mouse_1a",
       "M09_CIV_Cat_and_Mouse_1b",
       "m09_civ_cat_and_mouse_2",
       "m10_civ_bridge_1",
       "m10_civ_bridge_2",
       "M11_CIV_Blimp_1"
    };

    if(levels.Any((level) => eq(old.LevelFirst,level) &&  eq(current.LevelSecond, ":" + level) || eq(old.LevelSecond,level) && eq(current.LevelFirst, ":" + level)))
       return true;

    // NOT SURE IF IT WORKS
    //if (old.LevelSecond.Equals("M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
    //  return true; 

    // Final split
    if (current.Cutscene.Contains("M11_010") && current.Cutscene != old.Cutscene)
        return true;
Func eq=(a,b)=>a.Equals(b,StringComparison.OrdinalIgnoreCase);
变量级别=新字符串[]
{
“M01_HOO_Tranes_Hood_1”,
“M01_HOO_Tranes_Hood_1a”,
“M01_HOO_Tranes_Hood_2”,
“M01_HOO_Tranes_Hood_3”,
“M01_HOO_Tranes_Hood_4”,
“M02_HOO_Subway_1a”,
“M02_HOO_Subway_1b”,
“m02_hoo_subway_2”,
“m02_hoo_subway_3”,
“m03_hoo_谁有牛肉_1”,
“m03_hoo_谁有牛肉_2”,
“m03_hoo_谁有牛肉_3”,
“m03_hoo_谁有牛肉_4”,
“M04_HOO_Subway_Layou_1a”,
“M04_HOO_Subway_Layu_1b”,
“M04_HOO_Subway_Layou_2”,
“M05战火1号”,
“M05战火3号”,
“m06工业防弹1”,
“m06工业防弹2”,
“M06工业防弹3”,
“M07_-HOO_-Blind_-Justice_-1”,
“M07_-HOO_-Blind_-Justice_-2”,
“M07_-HOO_-Blind_-Justice_-3”,
“记住阿拉莫1号”,
“m08_hoo_Rememberd_alamo_2”,
“M08_-HOO_记住_-Alamo_3”,
“M09_CIV_Cat_和_Mouse_1a”,
“M09_CIV_Cat_和_Mouse_1b”,
“m09_civ_cat_和_mouse_2”,
“m10_civ_bridge_1”,
“m10_civ_bridge_2”,
“M11_CIV_Blimp_1”
};
if(levels.Any((level)=>eq(old.LevelFirst,level)和&eq(current.LevelSecond,“:”)| | eq(old.LevelSecond,level)和&eq(current.LevelFirst,“:”+level)))
返回true;
//不确定它是否有效
//if(old.LevelSecond.Equals(“M11_CIV_Blimp_2”,StringComparison.OrdinalIgnoreCase)和current.LevelSecond.Equals(“:M11_CIV_Blimp_2,StringComparison.OrdinalIgnoreCase”)和current.LevelSecond.Equals(“:M11_CIV_Blimp,StringComparison.OrdinalIgnoreCase);”old.LevelFirst.Equals(“M01_HOO_Tranes_Hood,StringComparison.ordinagnorecase”)和current
//返回true;
//最终拆分
if(current.Cutscene.Contains(“M11_010”)&¤t.Cutscene!=old.Cutscene)
返回true;

但我不知道这是否真的更具可读性。

你的问题是什么?你的代码质量?是的,有没有优化它的方法?Split甚至可以返回false?你也不能测试old.LevelSecond.Equals(“:”+current.LevelSecond)它真的在胡闹这个eve应该做什么?是的,它可以。我认为这是不可能的。就像我说的,它基本上监视levelname地址,以及当它从“级别”变为“:级别”时它认为这是一个已通过的任务,并且会分裂。那么你真正想做什么呢?试着像对门外汉一样描述你的问题。谢谢克里斯,注意到。至于切换。我不确定这是否可行?假设我第一次加载游戏,我在菜单中-当前关卡首先持有“菜单”,我进入一个关卡,旧的是“菜单”,curret是“m001…”.如果我离开level,它会切换(当前的“菜单”;旧的“m001…”)。现在如果我进入一个关卡并完成它,当前的LevelFirst会突然出现随机giberish,所有的都会移动到LEVELSEXT,所以当前的“菜单”会出现“:m001…”但是,旧的是空的。但是,假设我在游戏的中间,游戏崩溃了,现在游戏又回到了使用LeaveC1并重复同样的事情。我必须假设游戏在任何时候崩溃,所以为什么会有这么多的if语句。我想如果你澄清什么是<代码>旧的。nt.LevelFirst
current.LevelSecond
实际上是。我猜
old
是以前的状态,
current
是您刚刚进入的新状态。那么
LevelFirst
LevelSecond
相比呢?(总共是这四个变量吗?)