我的课程中有3个属性,如下所示:
public class MyClass
{
public string property1 {get;set;}
public string property2 {get;set;}
public string property3 {get;set;}
}
当我进行API调用时,我正试图在这3个属性之间切换......
当我使用作为参数发送到我的服务器的任何这些属性进行API调用时,服务器返回一个标志“TotalResults”。现在我想做的是在服务器返回TotalResults>后立即停止进行API调用。 0(表示服务器返回至少1个结果)。
所以我想我可以尝试使用switch case语句。我喜欢使用switch case语句,如下所示:
第一种情况,服务器返回totalresults> 0我想退出switch语句并继续使用代码......
示例代码:
switch (myProperties)
{
case "":
//Do Something
break;
case "":
//Do Something
break;
case "":
//Do Something
break;
default:
//Do the Default
break;
}
因此,第一个返回至少1个结果的案例是将在视图中显示的那个......
有人能帮助我吗?
P.S。我知道我可以使用不同的值切换1个属性,但不能使用switch-case语句切换3个不同的属性吗?
答案 0 :(得分:1)
对于多个变量的多个条件,我们在C#:if
语句中有一个功能。常规开关只是针对一些常量检查一个变量。
你可以这样做:
if (property1 == property2 == property3 == 0)
{
// do your thing
}
// if not, you are done
答案 1 :(得分:0)
你可以构建一个"位掩码"值基于三个属性的值,编码TotalReturn
高于零的值的组合:
var combination =
((prop1TotalReturn > 0) ? 4 :0)
| ((prop2TotalReturn > 0) ? 2 :0)
| ((prop3TotalReturn > 0) ? 1 :0);
注意选择常数4,2和1.这些是2的幂,因此结果将在0到7的范围内,包括0和7。 combination
中设置的每个位对应MyClass
的属性。
现在,您可以在交换机中使用combination
,根据生成TotalReturn
以上的属性来确定要执行的操作,例如:
switch (combination) {
case 7:
case 6:
case 5:
case 4: // Use prop1
break;
case 3:
case 2: // Use prop2
break;
case 1: // Use prop3
break;
case 0; // No property produced TotalReturn > 0
break;
}
如果您没有提前获得所有数据,switch
将无效。您可以使用延迟执行LINQ来获取数据"懒惰":
var propNames = new[] {"prop1", "prop2", "prop3"};
var firstPositive = propNames
.Select(name => new {
Name = name
, TotalReturn = MakeApiCall(name)
}).FirstOrDefault(res => res.TotalReturn > 0);
if (firstPositive != null) {
Console.WriteLine("TotalReturn for {0} was {1}", firstPositive.Name, firstPositive.TotalReturn);
} else {
Console.WriteLine("No positive TotalReturn");
}