1

스위치 - C#에서 많은 변수를 전환하는 방법 (값이 널 또는 비어 있는지 점검))를 사용하여 거대한 if-else-if 체인 (+20 else-ifs)을 대체합니다. 어떻게 스위치 문으로 내 코드를 교체 이하, 더욱 효율적인 코드 수 있습니다 : 나는을 시도스위치 - C#에서 여러 변수를 대입하는 방법 (값이 널 또는 비어 있는지 검사) if-else-if 체인을 교체하십시오.

 con.Open(); 
     SqlCommand cmd = new SqlCommand("usp_AddPublisher", con); 
     cmd.CommandText = "usp_AddPublisher"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     if (String.IsNullOrEmpty(data.Account_Num)) 
     { 
      cmd.Parameters.AddWithValue("@AccountNum", ""); 
     } 
     else 
      cmd.Parameters.AddWithValue("@AccountNum", data.Account_Num); 
     if (String.IsNullOrEmpty(data.publisher)) 
     { 
      cmd.Parameters.AddWithValue("@publisher", ""); 
     } 
     else 
      cmd.Parameters.AddWithValue("@publisher", data.publisher); 
     if (String.IsNullOrEmpty(data.addr1)) 
     { 
      cmd.Parameters.AddWithValue("@addr1", ""); 
     } 
     else 
      cmd.Parameters.AddWithValue("@addr1", data.addr1); 

을하지만 너무 길어 :

con.Open(); 
     SqlCommand cmd = new SqlCommand("usp_AddPublisher", con); 
     cmd.CommandText = "usp_AddPublisher"; 
     cmd.CommandType = CommandType.StoredProcedure; 
switch (String.IsNullOrEmpty(data.Account_Num)) 
     { 
      case true: 
       cmd.Parameters.AddWithValue("@AccountNum", ""); 
       break; 
      case false: 
       cmd.Parameters.AddWithValue("@AccountNum", data.Account_Num); 
       break; 

     } 
    switch (String.IsNullOrEmpty(data.publisher)) 
      { 
       case true: 
        cmd.Parameters.AddWithValue("@publisher", ""); 
        break; 
       case false: 
        cmd.Parameters.AddWithValue("@publisher", data.publisher); 
        break; 
      } 
      switch (String.IsNullOrEmpty(data.addr1)) 
      { 
       case true: 
        cmd.Parameters.AddWithValue("@addr1", ""); 
        break; 
       case false: 
        cmd.Parameters.AddWithValue("@addr1", data.addr1); 
        break; 
      } 

답변

2

모든 당신이로 ""을 사용하고있는 감안할 때 값이 문자열이 null이거나 비어있는 경우 null에서 ""까지 병합하는 것입니다. 당신이 전에 널 병합 연산자 ?? 건너없는 한 경우

cmd.Parameters.AddWithValue("@AccountNum", data.Account_Num ?? "") 

, 당신은 그것을 in the documentation에 대해 읽을 수 있습니다 : 그래서 그냥 그렇게.

0

이 목적을 위해이 같은 conditional operator ?: 사용할 수 있습니다

cmd.Parameters.AddWithValue("@AccountNum", String.IsNullOrEmpty(data.Account_Num) ? "" : data.Account_Num); 

또는 - 찰스 MAGER 이미 언급 (더 읽을 수 있습니다)처럼 -이 같은 운영자 :

cmd.Parameters.AddWithValue("@AccountNum", data.Account_Num ?? ""); 
1

당신에게 이대로 시도해 볼 수 있습니다.

cmd.Parameters.AddWithValue("@addr1", string.IsNullOrEmpty(data.addr1) ? "" : data.addr1); 

또는 문자열의 값이 null이거나 비어 있지 않을 때 문자열의 값을 반환하는 확장 메서드를 만들 수 있습니다. 그렇지 않으면 빈 문자열이 반환됩니다.

0

국부 기능 (2017 7/VS C 번호)이 명확하게 보이는 관련된 논리를 유지하고 논리를 필요로 각 매개 변수에 대해 "헤드"를 감소

void TheOuterFunction() 
{ 
    // your cmd is set up here 
    var cmd = ...; 
    ...; 

    AddParameter("@AccountNum", data.Account_Num); 
    AddParameter("@publisher", data.publisher); 
    ...; 

    void AddParameter(string name, string value) 
    { 
     if (String.IsNullOrEmpty(value)) 
     { 
      cmd.Parameters.AddWithValue(name, ""); 
     } 
     else 
     { 
      cmd.Parameters.AddWithValue(name, value); 
     } 
    } 
} 

.

0

를 사용하여 별도의 기능 :

public void SomeFunction() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("usp_AddPublisher", con); 
    cmd.CommandText = "usp_AddPublisher"; 
    cmd.CommandType = CommandType.StoredProcedure; 

    SwitchFunction(data.Account_Num, "@AccountNum", cmd); 
    SwitchFunction(data.publisher, "@publisher", cmd); 
    SwitchFunction(data.addr1, "@addr1", cmd); 
} 

public void SwitchFunction(string testVar, string withVal, SqlCommand cmd) 
{ 
    switch (String.IsNullOrEmpty(testVar)) 
    { 
     case true: 
      cmd.Parameters.AddWithValue(withVal, string.Empty); 
      break; 
     case false: 
      cmd.Parameters.AddWithValue(withVal, testVar); 
      break; 
    } 
} 
관련 문제