> 백엔드 개발 > C++ > 본문

C#에서 \'개체 참조가 개체의 인스턴스로 설정되지 않음\' 이해 및 수정

王林
풀어 주다: 2024-07-19 01:15:19
원래의
552명이 탐색했습니다.

Understanding and Fixing

소개

C# 개발자가 직면하는 가장 일반적이고 실망스러운 오류 중 하나는 악명 높은 개체 참조가 개체의 인스턴스로 설정되지 않은 것입니다. 이 오류 메시지는 특히 프로그래밍을 처음 접하는 사람들에게는 혼란스러울 수 있습니다. 이 기사에서는 이 오류를 이해하고, 그 원인을 설명하고, 기억에 남는 실제 비유를 제공하고, 이를 예방하고 수정할 수 있는 솔루션을 제공할 것입니다.

"개체 참조가 개체의 인스턴스로 설정되지 않음"은 무엇을 의미합니까?
일반인의 관점에서 보면 이 오류는 아직 생성되지 않은 개체를 사용하려고 할 때 발생합니다. 마치 아직 만들어지지 않은 자동차를 운전하려는 것과 같습니다. 존재하지 않는 것을 사용할 수는 없습니다.

기술적으로 이 오류는 NullReferenceException입니다. null인 개체의 멤버(메서드, 속성, 필드)에 액세스하려고 할 때 발생합니다. null 개체는 개체 참조가 아무 것도 가리키지 않거나 개체의 인스턴스가 메모리에 존재하지 않음을 의미합니다.

실제 비유
당신이 집에 있는데 전화를 걸고 싶다고 상상해 보세요. 당신은 휴대전화를 찾으려고 손을 뻗지만, 구매한 적이 없기 때문에 휴대전화가 거기에 없습니다. 이 시나리오에서는:

  • 전화가 곧 물건입니다.

  • 전화에 접근하는 것은 개체의 구성원에 액세스하려는 것과 같습니다.

  • 휴대폰이 없다는 것은 객체 참조가 null인 것과 같습니다.

그래서 전화를 걸려고 하면 전화(객체)가 존재하지 않기 때문에 전화를 걸 수 없습니다. 마찬가지로, 코드에서 인스턴스화되지 않은 개체를 사용하려고 하면 개체 참조가 개체의 인스턴스로 설정되지 않음 오류가 발생합니다.

일반 시나리오 및 수정 사항:

- 초기화되지 않은 개체

class Person
{
    public string Name { get; set; }
}

Person person = null;
Console.WriteLine(person.Name); // Throws NullReferenceException

로그인 후 복사

수정: 개체 초기화

Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name); // No error

로그인 후 복사

- 클래스의 초기화되지 않은 멤버

class Car
{
    public Engine Engine { get; set; }
}

class Engine
{
    public int Horsepower { get; set; }
}

Car car = new Car();
Console.WriteLine(car.Engine.Horsepower); // Throws NullReferenceException

로그인 후 복사

수정: 멤버 초기화

Car car = new Car { Engine = new Engine() };
car.Engine.Horsepower = 150;
Console.WriteLine(car.Engine.Horsepower); // No error

로그인 후 복사

- 메서드에서 Null 반환

class Repository
{
    public Person GetPersonById(int id)
    {
        // Returns null if person not found
        return null;
    }
}

Repository repo = new Repository();
Person person = repo.GetPersonById(1);
Console.WriteLine(person.Name); // Throws NullReferenceException

로그인 후 복사

수정: Null 확인

Person person = repo.GetPersonById(1);
if (person != null)
{
    Console.WriteLine(person.Name); // No error if person is not null
}
else
{
    Console.WriteLine("Person not found");
}

로그인 후 복사

- 컬렉션에 대한 잘못된 가정

List<Person> people = null;
Console.WriteLine(people.Count); // Throws NullReferenceException

로그인 후 복사

수정: 컬렉션 초기화

List<Person> people = new List<Person>();
Console.WriteLine(people.Count); // No error

로그인 후 복사

NullReferenceException을 방지하기 위한 모범 사례

  1. Null 조건부 연산자 사용

null 조건부 연산자(?.)는 null일 수 있는 개체의 멤버에 안전하게 액세스하는 데 도움이 됩니다.

Person person = null;
Console.WriteLine(person?.Name); // No error, outputs nothing

로그인 후 복사
  1. 변수 및 멤버 초기화

Null 참조를 방지하려면 항상 변수와 클래스 멤버를 초기화하세요.

class Car
{
    public Engine Engine { get; set; } = new Engine();
}

로그인 후 복사
  1. Null 검사 수행

객체의 멤버에 액세스하기 전에 항상 null을 확인하세요.

if (person != null)
{
    Console.WriteLine(person.Name);
}

로그인 후 복사
  1. LINQ로 안전한 탐색 사용

LINQ를 사용하는 경우 쿼리를 수행하기 전에 컬렉션이 null이 아닌지 확인하세요.

var names = people?.Select(p => p.Name).ToList();

로그인 후 복사

결론
개체 오류의 인스턴스로 설정되지 않은 개체 참조는 C# 개발자에게 일반적인 걸림돌이지만 해당 원인을 이해하고 이를 방지하고 수정하는 방법을 알면 많은 어려움을 겪을 수 있습니다. 항상 개체를 초기화하고 필요한 경우 null 검사를 수행하는 것을 잊지 마세요. 이러한 모범 사례를 염두에 두면 향후 프로젝트에서 이 오류를 처리하고 방지할 수 있는 준비를 갖추게 됩니다.

LinkedIn 계정: LinkedIn
트위터 계정: 트위터
크레딧: LoginRadius에서 가져온 그래픽

위 내용은 C#에서 \'개체 참조가 개체의 인스턴스로 설정되지 않음\' 이해 및 수정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!