ProgramingTip

var를 초기화하는 방법?

bestdevel 2021. 1. 9. 16:26
반응형

var를 초기화하는 방법?


null 또는 일부 빈 값으로 var를 초기화 할 수 있습니까?


C #은 엄격하고 강력한 형식의 언어 입니다. var는 익명 유형에 대한 타임 유형 바인딩을 위해 디자인 타임에 이미 내장 된 기본 및 사용자 정의 유형에 대해 var를 사용할 수 있습니다. 실제 유형으로 대체됩니다.

네가 얘기 할 때,

var x = null; 

null에 바인딩 된 유형이 없기 때문에 컴파일러가 발생할 수 없습니다. 이렇게 만들 수 있습니다.

string y = null;
var x = y;

이제 x는있을 때 타임 에이 있기 때문에 작동합니다.


왜 이것이 가능하지 않습니까?

var theNameOfTheVar = (TheType)null;

예 :

var name = (string)null;

그렇게 간단합니다.


다른 사람들이 말했듯이 유형의 모호성이 문제입니다. 그래서 대답은‘아니요’입니다. C #은 강력한 형식의 언어이기 때문에 그런 일이 발생하도록 허용하지 않습니다. 컴파일러는 유형으로 추론 설계 제안 수 있습니다. object(C # null에는 유형이 없음).

하나의 대안은

var foo = new { }; //anonymous type

다시 한 번, 내부 타임 null에는 익명으로 초기화되고 결국 은폐됩니다. 보다 짧은 몇 줄 new object()입니다. 이 경우에는 익명 유형을 재 할당 할 수 foo있습니다 .

null알 수없는 유형으로 초기화 하는 것은 의문의 여지가 없습니다.

하지 않는 한 당신이 사용하고 dynamic.

dynamic foo = null;
//or
var foo = (dynamic)null; //overkill

물론 foo변수에 값을 다시 할당하지 않는 한 꽤 쓸모가 없습니다 . Visual Studio 인텔리 인텔리 센스 지원이 비용입니다.

마지막으로 다른 사람들이 대답했듯이 캐스팅을 특정 유형을 선언 할 수 있습니다.

var foo = (T)null;

따라서 옵션은 다음과 가변됩니다.

//initializes to non-null; I like it; cant be reassigned a value of any type
var foo = new { }; 

//initializes to non-null; can be reassigned a value of any type
var foo = new object();

//initializes to null; dangerous and finds least use; can be reassigned a value of any type
dynamic foo = null;
var foo = (dynamic)null;

//initializes to null; more conventional; can be reassigned a value of any type
object foo = null;

//initializes to null; cannot be reassigned a value of any type
var foo = (T)null;


이것이 VAR에 변수 초기화 하는 방법입니다.

var _myVal = (dynamic)null; 

varnull정적으로 입력 입력해야 우리하므로 로 설정할 수 없습니다 .

var foo = null;
// compiler goes: "Huh, what's that type of foo?"

그러나이 구성을 사용하여 문제를 해결할 수 있습니다.

var foo = (string)null;
// compiler goes: "Ah, it's a string. Nice."

확실히 모르겠지만, 내가들은 바 dynamic에서 var. 정적 입력이 필요하지 않습니다.

dynamic foo = null;
foo = "hi";

또한 var일반적으로 키워드 또는 변수 를 의미하는지 질문에서 명확하지 않았기 때문에 참조 (클래스에 대한) 및 nullable 유형 만 null로 설정할 수 있습니다. 예를 들어 다음과 같이 할 수 있습니다.

string s = null; // reference
SomeClass c = null; // reference
int? i = null; // nullable

그러나 당신은 이것을 할 수 없습니다 :

int i = null; // integers cannot contain null

음, 새 개체에 할당 할 수 있다고 생각합니다. 다음과 같은 것 :

var v = new object();

var당신이 컴파일시에 원하는 유형을 추론하도록 컴파일러에 지시 ... 그것에서 추론 할 수 없습니다 null(이 경우도 비록 ).

그래서, 당신은 이것을 할 수 없습니다.

"일부 빈 값"이라고 말하면 ... 다음을 의미하는 경우 :

var s = string.Empty;
//
var s = "";

그렇다면 예, 그렇게 할 수는 있지만 null.


아니. var유형으로 초기화해야하며 null 일 수 없습니다.


var 유형에 null을 할당 할 수 없습니다.

null을 할당하면 컴파일러는 var 위치에서 원하는 변수를 찾을 수 없습니다.

오류가 발생합니다. Cannot assign <null> to an implicitly-typed local variable

당신은 이것을 시도 할 수 있습니다 :

var dummy =(string)null;

여기서 컴파일러는 원하는 유형을 찾을 수 있으므로 문제가 없습니다.

빈 값을 할당 할 수 있습니다.

var dummy = string.Empty;

또는

var dummy = 0;

null로 var를 초기화 할 수 없으며 var는 유형으로 초기화해야합니다. 그렇지 않으면 추론 할 수 없습니다.이 작업을 수행해야한다고 생각하면 코드를 게시 할 수 있습니다. 시도.


감사합니다 Mr. Snake, 내가 찾던 또 다른 트릭에이 도움이되는 것을 발견했습니다 :) (댓글을 달기에 충분한 대답이 아닙니다)

nullable 형식의 속기 할당. 이렇게 :

var someDate = !Convert.IsDBNull(dataRow["SomeDate"])
                    ? Convert.ToDateTime(dataRow["SomeDate"])
                    : (DateTime?) null;

참조 URL : https://stackoverflow.com/questions/2904689/how-to-initialize-var

반응형