본문 바로가기
개발언어/C#

[C#] class 객체 배열 new 할당 후 배열 요소 null 접근 문제 해결

by 창용이랑 2021. 8. 23.
728x90

1. 클래스 객체 배열 선언 후 접근 문제 

 

Class 객체를 배열로 생성 하고 사용 하려면 값 타입 배열 생성과 다르게 배열 요소에 접근 하게 되면 null 에러가 발생 한다.

 

class SomeClass
{
	public int Value = 0;
}

SomeSomeClass[] aaa = new SomeClass[10];

aaa[0].Value = 99;   // 에러 발생 null exception

 

여기에서 aaa[0].Value 와 같이 0번째 배열에 접근 하려면 null 포인터 예외가 발생 한다. 

SomeClass[] aaa = new SomeClass[10];

for (int i = 0; i < aaa.Length; i++)    
{         
	aaa[i] = new SomeClass();    
} 

aaa[0].Value = 99;  //  에러 없이 성공

위와 같이 new로 각각 할당 해줘야 하는데 매번 저렇게 하면 코드도 지저분해지고 귀찮다.

 

2. Extension Method 이용

 

public static class Untility
{ 
    public static void InitializeArray(this T [] array) where T : class, new()
    {
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = new T();
        }
    }

    public static T[] InitializeArray( int length ) where T : class, new()
    {
        T[] array = new T [ length ];
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = new T();
        }

        return array;
    }
}

위와 같이 Extension Method와 Generic Method를 사용 하면 편하게 사용 할 수 있다.

 

 

“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"

 

3. 사용법

class SomeClass
{
    public int Value = 0;
}

public class Test
{
    public void Run()
    {
        SomeClass[] aaa = new SomeClass[10];
        aaa.InitializeArray();

        SomeClass[] bbb = Untility.InitializeArray(10);
    }
}

 

 

c# point array initializec# point array initialize
c# initialize pointf array
c# initialize array of points
c# initialize array with null values
c# initialize array without new
c# initialize array with new objects
c# initialize array null
c# initialize array new
c# how to initialize array of objects
unity3d initialize array c#
unity c# initialize array
c# initialize array of custom class
c# initialize array object
c# generic where t new()

arrays as objects

c# initialize array of objects default constructor

 

 

출처 : https://dragontory.tistory.com/20