나는 열거 형이있다
string name;
public enum Color
{
Red,
Green,
Yellow
}
로드시 NULL로 설정하는 방법
name = "";
Color color = null; //error
편집 : 내 나쁜, 나는 제대로 설명하지 않았다. 그러나 nullable과 관련된 모든 대답은 완벽합니다. 내 상황은 이름과 같은 다른 요소가있는 클래스에서 열거 형에 대해 가져 오거나 설정 한 경우입니다. 페이지로드에서 클래스를 초기화하고 기본값을 null로 설정하려고합니다. 시나리오는 다음과 같습니다 (코드는 C # 임).
namespace Testing
{
public enum ValidColors
{
Red,
Green,
Yellow
}
public class EnumTest
{
private string name;
private ValidColors myColor;
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
EnumTest oEnumTest = new EnumTest();
oEnumTest.Name = "";
oEnumTest.MyColor = null; //???
}
}
}
그런 다음 아래 제안을 사용하여 get 및 set 메소드와 작동하도록 위의 코드를 변경했습니다. “?”만 추가하면됩니다. 개인 열거 형 변수 선언 중 EnumTest 클래스 및 get / set 메소드에서 :
public class EnumTest
{
private string name;
private ValidColors? myColor; //added "?" here in declaration and in get/set method
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors? MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
멋진 제안에 감사드립니다.
답변
“?”를 사용할 수 있습니다 널 입력 가능 유형의 연산자.
public Color? myColor = null;
또는 열거 형의 FIRST 값 (일명 0)을 기본값으로하여 널이 될 수없는 열거 형의 표준 사례를 사용하십시오. 예를 들어 색상 없음의 경우.
public Color myColor = Color.None;
답변
이것이 C #이면 작동하지 않습니다. 열거 형은 값 유형이며 사용할 수 없습니다 null
.
일반적인 옵션은 None
멤버 를 추가하는 것입니다 .
public enum Color
{
None,
Red,
Green,
Yellow
}
Color color = Color.None;
… 또는 사용하기 Nullable
:
Color? color = null;
답변
변수를 널 입력 가능하게하십시오. 처럼:
Color? color = null;
또는
Nullable<Color> color = null;
답변
열거 형은 C #에서 “값”유형입니다 (열거는 값 자체가 저장된 메모리의 위치에 대한 참조가 아니라 임의의 값으로 저장됨을 의미합니다). null은 참조 형식에만 사용되므로 값 형식을 null로 설정할 수 없습니다.
즉, Nullable<T>
값 유형을 래핑 하는 내장 클래스를 사용하여 값을 null로 설정하고 값을 확인 HasValue
하고 실제 값을 얻을 수 Value
있습니다. (두 가지 모두 Nullable<T>
객체 에 대한 방법입니다 .
name = "";
Nullable<Color> color = null; //This will work.
사용할 수있는 바로 가기도 있습니다.
Color? color = null;
그것은 동일합니다 Nullable<Color>
;
답변
나는 여기에 C ++을 가정하고 있습니다. c #을 사용하는 경우 대답은 동일하지만 구문이 약간 다릅니다. 열거 형은 int 값의 집합입니다. 객체가 아니므로 null로 설정해서는 안됩니다. 무언가를 null로 설정하면 주소가 0 인 객체를 가리키는 포인터를 의미합니다. 실제로 int로는 그렇게 할 수 없습니다. int로하고 싶은 것은 좋은 가치인지 아닌지에 대해 전화를 걸 수 있도록 일반적으로 가지고 있지 않은 값으로 설정하는 것입니다. 따라서 색상을 -1로 설정하십시오.
Color color = -1;
또는 열거 형을 1에서 시작하여 0으로 설정할 수 있습니다. 지금과 같이 색상을 0으로 설정하면 열거 형에서 빨간색이 0이므로 “빨간색”으로 설정됩니다.
그래서,
enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;
답변
명시 적으로 값 0을
None
상수에 할당하는 것이 좋지 않을까요? 왜?
기본값 enum
은 0과 같으 므로 호출 default(Color)
하면 print가 None
됩니다.
첫 번째 위치에 있기 때문에 리터럴 값 0을 다른 상수에 할당하면 해당 동작이 변경되고 발생 순서를 변경하면 default(Color)
( https://stackoverflow.com/a/4967673/8611327 )의 출력이 변경됩니다.
답변
Color? color = null;
또는 당신은 사용할 수 있습니다
Color? color = new Color?();
null 할당이 작동하지 않는 예
color = x == 5 ? Color.Red : x == 9 ? Color.Black : null ;
그래서 당신은 사용할 수 있습니다 :
color = x == 5 ? Color.Red : x == 9 ? Color.Black : new Color?();