我有以下代码:
$count = 0;
foreach ($this->topics()->withCount('replies')->get() as $topic) {
$count += $topic->replies_count;
}
问题是现在第二种情况不起作用。
我需要一些可以充当通配符的东西,以便任何" OR.ISSUE1234567"可以识别并赋予p变量适当的值。
所以如果d以" OR开头。" p的值将是"重新发行"。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
似乎RegEx是一种更好的方法。使用RegEx,您可以使用通配符,它可以非常强大。如果你使用System.Text.RegularExpressions添加""你将能够访问它。以下是一个示例。您可以在Google上找到许多可以解释不同符号以及如何构建匹配模式的网站。
string d = "OR.ISSUE226568";
string p;
if (Regex.IsMatch(d, "^OR.*$"))
{
Console.WriteLine("Worked!");
}
Console.ReadLine();
答案 1 :(得分:0)
您可以通过切换到使用条件而不是switch语句来执行此操作:
if (d == "VOID")
{
p = "VOID";
}
else if (d.StartsWith("OR."))
{
p = "Reissue";
}
或者你可以看一下使用正则表达式来匹配你的字符串,如果你想做一些更复杂的事情(参见MSDN)。
答案 2 :(得分:0)
无法将switch
块与通配符(或例如正则表达式)一起使用。但根据你的问题,你可以这样做:
string d = "OR.ISSUE226568";
if(d.StartsWith("OR."))
d = d.Remove(3);
string p;
switch (d)
{
case "VOID":
p = "VOID";
break;
case "OR.":
p = "Reissue";
break;
// other cases...
}
但由于您只有两个case
语句,因此根本不需要switch
。使用if/else
更容易,也更有意义。
答案 3 :(得分:0)
如果您只有以类型的检查开头支持,并且您可能需要在运行时更改它们,您可以使用字典:
string d = "OR.ISSUE226568";
//string d= "VOID";
// Dictionary with start of the string
var target = new Dictionary<string,string>() {
{"VOID","Void"},
{"OR.", "Reissue"}
};
// find the one that matches
var p = (from kv in target
where d.StartsWith(kv.Key)
select kv.Value).FirstOrDefault();