C#在3种不同的特性之间切换

时间:2017-05-04 12:33:09

标签: c# asp.net asp.net-mvc c#-4.0 switch-statement

我的课程中有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个不同的属性吗?

2 个答案:

答案 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");
}