巨大的if else语句的替代方案

时间:2019-06-25 11:53:33

标签: c# asp.net if-statement

我有一个庞大的数据,我需要根据Choices对其进行过滤,以获取一定的价值,我尝试使用if,但是这样做非常困难,因为它确实庞大且嵌套。

exports.handler = function(event, context, callback) {
    console.log("here1");
    var request = require('request');
    console.log("here2");
    var promise = new Promise(function(resolve, reject) {
        request({
            url: 'https://audd.p.rapidapi.com',
            method: 'post',
            headers: { "X-RapidAPI-Host": "audd.p.rapidapi.com", 'X-RapidAPI-Key': '***************************************************' },
            timeout: 10000,
            body: JSON.stringify({
                audio: base64,
                method: 'recognize',
                return: 'lyrics,timecode'
            })
        }, function(error, result, body) {
            console.log("here3");
            if (error) {
                console.log(error);
                reject(error)
            } else if (result.statusCode === 500) {
                console.log('error');
                reject(result.statusCode);
            } else {
                console.log(body);
                resolve(body);
            }
        });
    });
    console.log("here4");
    return promise;
};

在每个if中依此类推。

**编辑

Type&Level&tech是来自其他方法的字符串。 这段代码很简短,实际代码中每个if里都包含30个if else。

2 个答案:

答案 0 :(得分:2)

根据您提供的信息,我可以假设,您可以这样做:

为级别创建字典,为类型创建字符串数组:

Dictionary<string, string> levels = new Dictionary<string, string>
{
    { "ground", "A" },
    { "UP", "B" },
};

string[] types = { "H", "E" };

然后假设您输入以下内容:

string tech = "2A";
string level = "ground";
string type = "H";

因此您现在可以执行以下操作:

if (types.Contains(type))
{
    string result = $"{tech}{levels[level]}";
}

答案 1 :(得分:0)

我知道您希望代码更具可读性,所以这是我的看法。请注意,我假设您想保持逻辑不变,即当Type = E,Tech = 2B和Level = ground时,输出为3BB(与“ Tech”不完全匹配):

if (Type == "H" && (Tech == "2A" || Tech == "3A"))
{
    if (Level == "ground")
        return $"{Tech}A";
    if (Level == "UP")
        return $"{Tech}B";
}
else if (Type == "E" && Tech == "2B")
{
    if (Level == "ground")
        return "3BB";
    if (Level == "UP")
        return "3BC";
}