2012-12-04 2 views
-2

간단한 질문 :C#? 연산자 구문

는 C#에서 작동 이런 종류의 구문이 있나요 :

  • 상태, 개체 자체 반환하는 경우 예를 아래에 기본 값

처럼을 ,하지만 myObject를 두 번 평가하지 않으려합니다 (데이터베이스 쿼리와 같이 훨씬 복잡한 작업 일 수 있습니다) :

null을 검사 할 때이 구문이 있다는 것을 알고 있습니다 (아래 예제에서와 같이). 그러나이 경우 DBNull.Value와 같은 다른 값을 확인하기 위해 있습니까?

int myVar = Convert.ToInt32(myObject ?? 0); 

답변

1

번호 :

int myVar = myObject == DBNull.Value ? 0 : (int)myObject; 

당신이 할 수있는 최선입니다. 객체가 두 번 언급 되었기 때문에 객체를 두 번 평가하지 않습니다.

또는 과정의 기능에 포장 :

int myVar = DBObjectToInt(myObject); 

public static int DBObjectToInt(object dbObj) 
{ 
    return dbObj == DBNull.Value ? 0 : (int)dbObj; 
} 

또 다른 옵션은 SQL에 Coalesce을 사용하고, 그래서 당신은 심지어 첫 번째 장소에서 DBNull이를하지 않습니다.

+0

이렇게하면 여기에 db- 쿼리를 두 번 입력하면됩니다 : int i = (dt.Compute ("MAX (Column)", string.Empty) == DBNull.Value? 0 : dt.Compute ("MAX (Column)", string.Empty)) ; – Jaska

+0

나는 임시 변수에 저장할 수 있음을 알고 있지만 한 줄의 코드에서이 모든 작업을 수행 할 수 있기를 바랬다. – Jaska

+0

네,하지만 myObject는 변수의 이름이라고 가정했습니다. 그래서 당신은 이미'var myObject = dt.Compute ("MAX (Column)", string.Empty); ' – weston

1

개체를 두 번 평가할 필요가 없습니다. 객체를 평가하여 변수에 저장하고 결과 변수에 대한 검사를 수행합니다.

귀하의 질문에 대한 대답은 아니오입니다. 단지 C#으로 자신 만의 미니 언어를 만들 수는 없습니다. 가장 일반적인 연산에 대한 단축키가 있지만 사용자 정의 3 항 단항 연산자는 하나가 아닙니다.

+0

임시 변수에 저장할 수 있음을 알고 있지만 한 줄에 코드를 넣을 수 있기를 바랬습니다 :) – Jaska

+0

perl 사용 ....... –