相关疑难解决方法(0)

"开启类型"还有比这更好的选择吗?

看作C#无法打开一个Type(我收集的并不是作为特殊情况添加的,因为is-a关系意味着可能有多个不同的情况可能适用),是否有更好的方法来模拟切换类型?

void Foo(object o)
{
    if (o is A)
    {
        ((A)o).Hop();
    }
    else if (o is B)
    {
        ((B)o).Skip();
    }
    else
    {
        throw new ArgumentException("Unexpected type: " + o.GetType());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# switch-statement system.type

312
推荐指数
15
解决办法
10万
查看次数

用什么代替巨型switch语句?

我有一个解析一些模板文件的代码,当它找到一个占位符时,它会用一个值替换它.就像是:

<html>
<head>
    <title>%title%</title>
</head>
<body bgcolor="%color%">
...etc.
Run Code Online (Sandbox Code Playgroud)

在代码中,解析器找到这些,调用此函数:

string getContent(const string& name)
{
    if (name == "title")
        return page->getTitle();
    else if (name == "color")
        return getBodyColor();
    ...etc.
}
Run Code Online (Sandbox Code Playgroud)

然后用返回值替换原始占位符.

在实际情况中,它不是虚拟网页,并且可以发生许多(50+)个不同的占位符.

我的代码是C++,但我猜这个问题存在于任何语言中.我猜它更多的是关于算法和OO设计.唯一重要的是必须编译,即使我希望我没有任何动态/评估代码.

我虽然关于实施责任链模式,但它似乎并没有改善这种情况.

更新:我也关注另一个帖子中的这个评论.我应该关心它吗?

c++ templates switch-statement chain-of-responsibility

17
推荐指数
2
解决办法
4041
查看次数