문제

아마도 C# 멍청한 질문일 것이므로 저를 비난하지 마십시오.나는 이것을하려고했습니다 :

if (ConfigurationManager.ConnectionStrings["PrimaryConnectionString"].ConnectionString != null)
{
    // ...
}

하지만 나는 계속해서 System.NullReferenceException.그냥 확인할 수 있는 문자열을 반환하기 때문에 생각했습니다. null 그리고 계속 나아가십시오.올바른 방법을 찾는 데 시간이 걸렸습니다.

ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["PrimaryConnectionString"];
if (cs != null)
{
    this.Connection.ConnectionString = cs.ConnectionString;
}

따라서 다른 경우에는 Session 내가 확인하고 싶은 어떤 가치에 대해 이의를 제기합니다. null 이와 같이:

if (Session["EmployeeID"] != null)
{
    _EmployeeID = System.Convert.ToInt32(Session["EmployeeID"]);
}

그래서 저는 언제 확인을 할 수 있는지 없는지 어떻게 알 수 있는지 알고 싶었습니다. null?

도움이 되었습니까?

해결책

상위 개체(ConfigurationManager.ConnectionStrings["PrimaryConnectionString"])에서 null 참조 예외가 발생했습니다.이것도 한번 확인해보면 괜찮습니다.

이 시도:

if ((ConfigurationManager.ConnectionStrings["PrimaryConnectionString"] != null)
&& (ConfigurationManager.ConnectionStrings["PrimaryConnectionString"].ConnectionString != null))
  { etc etc }

더 많은 방법을 사용하는 경우 이러한 검사를 분리하는 것이 유용할 것입니다.

다른 팁

당신의 문제는 당신이 확인하고 있다는 것입니다.

ConfigurationManager
    .ConnectionStrings["PrimaryConnectionString"]
        .ConnectionString

널 포인터를 위해.

실제로, 실제로,

ConfigurationManager
    .ConnectionStrings["PrimaryConnectionString"]

당신이 불신을 시도했을 때 저것 연결 문자열을 얻으려면 예외가 발생했습니다. 효과적으로, 당신이하고있는 일은 다음과 같습니다.

null.ConnectionString

문제가됩니다.

나는 단일 명령문에서 많은 층의 탈환을 피하거나 모든 시점에서 문제를 해결하기 위해 모든 것에 대한 예외 핸들러를 배치하는 경향이 있습니다.

첫 번째 테스트는 연결 문자열 여부를 확인합니다 이내에 ConnectionStringsettings는 NULL입니다. 두 번째 테스트는 ConnectionStringSettings 자체가 NULL인지 확인합니다. 그것은 다음의 차이점입니다.

if (person.Name == null)

그리고

if (person == null)

첫 번째는 뱅이가 될 것입니다 person 널입니다. 두 번째는면을 발견하지 못합니다 person.Name NULL입니다. 두 가지를 모두 확인하려면 다음과 같습니다.

if (person == null || person.Name == null)

일부 언어 (예 : Groovy)에는 Null-Safe Deerferencing Operator가 있으므로 다음을 수행 할 수 있습니다.

var x = Expr1?.Expr2?.Expr3?.Expr4;

테스트하려면 이런 종류의 테스트가 더 쉬워집니다. 어느 잠재적으로 긴 표현의 일부는 널입니다. 불행히도 C#은 다음과 같습니다.

그래서 나는 당신이 null을 확인할 수있는시기를 어떻게 알 수 있는지 알고 싶었습니까?

~할 수 있다 원하는 시간에 NULL을 확인하십시오 (NULL 값 유형을 제외하고는 NULL이 될 수 없습니다).

~해야 한다 객체의 멤버에 액세스하려는 경우 언제든지 NULL을 점검하면 객체를 포함하는 변수가 NULL이 아니라고 확신하지 않습니다.

널 점검을위한 몇 가지 전형적인 장소는 다음과 같습니다.

  • 당신은 당신이 쓰는 함수의 매개 변수로 당신에게 전달되는 객체를 얻습니다. 사용하기 전에 매개 변수에 대한 널 확인을하십시오.
  • 사용하려는 객체를 반환하는 메소드 (또는 속성 값을 가져 오기)를 호출합니다. 사용하기 전에 해당 리턴 값에 대해 널 확인하십시오.
  • 당신은 객체를 어떻게 NullReferenceException 매개 변수가 null 인 경우. 메소드를 호출하기 전에 전달하려는 변수를 널 확인하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top