=================================
=================================
=================================
public const int SZ_THeadPkt = 4;
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public class THeadPkt
{
[MarshalAs(UnmanagedType.U2, SizeConst = 2)]
public ushort PktKind;
[MarshalAs(UnmanagedType.U2, SizeConst = 2)]
public ushort PktSize;
public THeadPkt(ushort p1, ushort p2)
{
PktKind = p1;
PktSize = p2;
}
public int Size()
{
return Marshal.SizeOf(typeof(THeadPkt));
}
}
이런 식으로 된경우....
THeadPkt? headPk = null;
이런식으로 null을 넣을수 있다.
=================================
=================================
=================================
출처: http://www.csharpstudy.com/csharp/CSharp-nullable.aspx
만약 정수형 변수 i에 값이 설정되지 않은 상태를 할당하려면, 개발자는 2가지 방법을 사용할 수 있을 것이다. 즉, (1)프로그램에서 사용될 것 같지 않은 특정 값을 추정하여 할당하던지 (예를 들어, int i = int.MaxValue;) (2) 아니면 또 하나의 변수를 두어 변수 i가 missing임을 나타내게 할 수 있다 (예를 들어, bool iHasValue = false;). 이 두번째 방식이 Nullable의 기본 아이디어이다.
C# 에서는 Value Type에도 null을 할당할 수 있는 Nullable 타입을 지원한다. Nullable 타입은 Value 값을 갖고 있으면서 NULL 상태를 체크할 수 있는 기능(HasValue)을 함께 가지고 있는 struct 이다. 따라서 Nullable 타입은 struct(구조체)이므로 Value Type이다.
C#에서 int? 와 같이 해당 Value Type 뒤에 물음표를 붙이면, 해당 정수형 타입이 Nullable 정수형 타입임을 의미한다. 즉, 이 변수에는 NULL을 할당할 수 있다. C#의 이러한 특별한 문법은 .NET의 Nullable<T> 구조체로 컴파일시 변환된다. 즉, int?는 Nullable<int>와 동일하다.
int? i = null;bool? b = null;int?[] a = new int?[100];
Nullable 타입이 실무에서 흔히 사용되는 케이스는 DB와 연동되는 Data Layer 클래스들을 들 수 있는데, 예를 들어 SQL 서버 테이블에서 NULL을 허용하는 숫자, 날짜, bool등의 컬럼이 있다면, 이 컬럼 타입은 Nullable 타입으로 변환되어 테이블의 NULL 속성을 표현하게 된다. 아래 예제는 다양한 종류의 Nullable 파라미터를 받아들여 HasValue로 NULL 값을 미리 체크한 후, .Value 속성을 써서 해당 타입의 실제 값을 사용하고 있다.
Nullable 타입과 연관되어 자주 사용되는 C#의 ?? 연산자는 ?? 앞의 파라미터가 NULL인 경우 연산자 뒤의 값을 할당할 때 사용한다.
예제
예제
=================================
=================================
=================================
출처: https://docs.microsoft.com/ko-kr/dotnet/api/system.nullable-1?view=netframework-4.7.2
Nullable<T> Struct
정의
null
에 할당할 수 있는 값 형식을 나타냅니다.
[System.Serializable] public struct Nullable<T> where T : struct
형식 매개 변수
- T
Nullable<T> 제네릭 형식의 내부 값 형식입니다.
- 상속
- 특성
예제
다음 코드 예제에서는 Microsoft Pubs 예제 데이터베이스에서 테이블의 3 개의 행을 정의합니다. Null을 허용 하지 않은 두 개의 열과 두 개의 열이 null을 허용 하는 테이블에 포함 되어 있습니다.
using System; class Sample { // Define the "titleAuthor" table of the Microsoft "pubs" database. public struct titleAuthor { // Author ID; format ###-##-#### public string au_id; // Title ID; format AA#### public string title_id; // Author ORD is nullable. public short? au_ord; // Royalty Percent is nullable. public int? royaltyper; } public static void Main() { // Declare and initialize the titleAuthor array. titleAuthor[] ta = new titleAuthor[3]; ta[0].au_id = "712-32-1176"; ta[0].title_id = "PS3333"; ta[0].au_ord = 1; ta[0].royaltyper = 100; ta[1].au_id = "213-46-8915"; ta[1].title_id = "BU1032"; ta[1].au_ord = null; ta[1].royaltyper = null; ta[2].au_id = "672-71-3249"; ta[2].title_id = "TC7777"; ta[2].au_ord = null; ta[2].royaltyper = 40; // Display the values of the titleAuthor array elements, and // display a legend. Display("Title Authors Table", ta); Console.WriteLine("Legend:"); Console.WriteLine("An Author ORD of -1 means no value is defined."); Console.WriteLine("A Royalty % of 0 means no value is defined."); } // Display the values of the titleAuthor array elements. public static void Display(string dspTitle, titleAuthor[] dspAllTitleAuthors) { Console.WriteLine("*** {0} ***", dspTitle); foreach (titleAuthor dspTA in dspAllTitleAuthors) { Console.WriteLine("Author ID ... {0}", dspTA.au_id); Console.WriteLine("Title ID .... {0}", dspTA.title_id); Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1); Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0); Console.WriteLine(); } } } // The example displays the following output: // *** Title Authors Table *** // Author ID ... 712-32-1176 // Title ID .... PS3333 // Author ORD .. 1 // Royalty % ... 100 // // Author ID ... 213-46-8915 // Title ID .... BU1032 // Author ORD .. -1 // Royalty % ... 0 // // Author ID ... 672-71-3249 // Title ID .... TC7777 // Author ORD .. -1 // Royalty % ... 40 // // Legend: // An Author ORD of -1 means no value is defined. // A Royalty % of 0 means no value is defined.
설명
형식 값을 할당할 수 있습니다 하거나 지정할 수 있는 경우 null을 허용 하도록 이라고 null
, 즉, 형식 값이 없음을 합니다. 기본적으로 모든 참조 형식의 경우와 같은 String는 null을 허용 하지만 모든 값 형식의 경우와 같은 Int32, 되지 않습니다.
C# 및 Visual Basic을 사용 하 여 null 허용으로 값 형식 표시는 ?
표기법 값 형식입니다. 예를 들어 int?
C# 또는 Integer?
Visual Basic에서 할당할 수 있는 정수 값 형식 선언 null
합니다.
Nullable<T> 구조체 참조 형식은 디자인에서 null을 허용 하기 때문에 값 형식만 nullable 형식으로 사용할 수 있도록 지원 합니다.
합니다 Nullable 클래스에 대 한 보조 지원을 제공 합니다 Nullable<T> 구조입니다. Nullable 클래스는 nullable 형식의 내부 형식 가져오기 지원 하며 같음 및 비교 작업 쌍 내부 값 형식이 nullable 형식에 제네릭 같음 및 비교 작업을 지원 하지 않습니다.
기본 속성
두 기본 멤버를 Nullable<T> 구조는 합니다 HasValue 및 Value 속성입니다. 경우는 HasValue 에 대 한 속성을Nullable<T> 개체가 true
, 개체의 값을 사용 하 여 액세스할 수 있습니다는 Value 속성. 경우는 HasValue 속성은 false
, 개체의 값이 정의 되지 않습니다 및 액세스 하려고 합니다 Value 속성은 InvalidOperationException.
=================================
=================================
=================================
'프로그래밍 관련 > 언어들의 코딩들 C++ JAVA C# 등..' 카테고리의 다른 글
[Unity] 유니티 시간, 타임스캐줄러, 특정시간 호출 관련 (0) | 2019.04.06 |
---|---|
[C#] C# 날짜, 시간 관련 (0) | 2019.04.06 |
[C#] c#에서 UnmanagedType의 종류 관련 (0) | 2019.04.01 |
[C#] private, public, protected, internal 접근자 설정 관련 (0) | 2019.03.27 |
[C#] map기능과 비슷한 함수 관련 (Dictionary, hashtable) (0) | 2019.03.19 |
댓글 영역