ToString () 전에 null 확인
시나리오는 다음과 가변적입니다.
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
효과 작동하는 작동하는 동안이 나에게 못생긴 것입니다. ToString ()을 수행하기 전에 null을 확인하지 않는 수행 속성이 null이면 예외가 발생합니다. 이 시나리오를 처리하는 더 좋은 방법이 있습니까?
매우 감사합니다!
8 년 후 업데이트 (와우!)하여 C # 6의 null 조건부 연산자를 포함합니다 .
var value = maybeNull?.ToString() ?? String.Empty;
기타 접근 방식 :
object defaultValue = "default";
attribs.something = (entry.Properties["something"].Value ?? defaultValue).ToString()
나는 또한 사용하지 않는 것이 좋습니다.
public static string ToSafeString(this object obj)
{
return (obj ?? string.Empty).ToString();
}
.NET Framework 3.5를 대상으로하는 경우 가장 우아한 솔루션은 내 생각에 확장 방법 일 것입니다.
public static class ObjectExtensions
{
public static string NullSafeToString(this object obj)
{
return obj != null ? obj.ToString() : String.Empty;
}
}
그런 다음 사용하려는 비용 :
attribs.something = entry.Properties["something"].Value.NullSafeToString();
Convert.ToString(entry.Properties["something"].Value);
에 빈 문자열 object-을 추가하는 ToString
[해석] 다음과 같이 널 안전 CHAPTER 2 을 수행 할 수있는 일반적인 관용구입니다 .
attribs.something = ""+entry.Properties["something"].Value;
때 entry.Properties["something"].Value
이다 null
,이 조용히 빈을 반환합니다 string
.
편집 : C # 6부터 ?.
연산자를 사용 null
하여 더 간단한 방법으로 검사 하는 것을 피할 수 있습니다 .
attribs.something = entry.Properties["something"].Value?.ToString();
// ^^
할 수없는 일 :
attribs.something = entry.Properties["something"].Value as string;
attribs.something = String.Format("{0}", entry.Properties["something"].Value);
그래도 성능에 대해 잘 모르겠습니다 ...
RexM의 답변에 대한 변형으로 :
attribs.something = (entry.Properties["something"].Value ?? attribs.something).ToString()
유일한 단점은 entry.Properties [ "something"]입니다. Value가 null 인 경우에도 attribs.something에 값 (이 예에서는 자체적으로)이 할당됩니다. .something 속성이 다른 처리를 수행하면 비용이 많이들 수 있습니다. 그리고 / 또는이 줄은 (루프처럼) 많이 실행됩니다.
정확히 수행하려는 작업을 수행하려는 경우 항상 도우미 메서드를 사용할 수 있습니다.
CopyIfNotNull(entry.Properties["something"].Value, out attribs.something);
void CopyIfNotNull(string src, out string dest)
{
if(src != null)
dest = src;
}
이 같은 것을 할 수 어떻게 든 위 데일 레이건의 답변을 하지만, (ToString을 무시) 대신 새로운 NullSafeToString () 메소드를 만드는? 이 (또는 "null"반환)이 기본 동작이되기를 바랍니다. 공용 정적 클래스 ObjectExtensions에 다음 메서드를 추가 할 때 컴파일러 (Visual C # 2010 Express)가 불평하지 않지만 메서드가 호출되지 않습니다.
public static String ToString(this Object obj)
{
if (obj == null)
{
return "null";
}
else
{
return obj.GetType().Name;
}
}
attribs.something = string.Format("{0}",entry.Properties["something"].Value)
C # 6.0에서는 매우 우아한 방식으로 수행 할 수 있습니다.
attribs.something = entry.Properties["something"].Value?.ToString();
그리고 여기에 새로운 null 조건부 연산자 에 대한 기사가 있습니다.
다음과 같은 보조 방법을 사용하는 것은 어떻습니까?
attribs.something = getString(
entry.Properties["something"].Value,
attribs.something);
static String getString(
Object obj,
String defaultString)
{
if (obj == null) return defaultString;
return obj.ToString();
}
또는 ??
연산자를 사용할 수 있습니다 .
attribs.something =
(entry.Properties["something"].Value ?? attribs.something).ToString();
( ToString()
값이 이면 호출에 유의하십시오. null
)
참고 URL : https://stackoverflow.com/questions/550374/checking-for-null-before-tostring
'ProgramingTip' 카테고리의 다른 글
PostgreSQL 서버가 중지되지 않았습니다 (0) | 2020.10.20 |
---|---|
Java 9에서 sdkmanager --list (Android SDK) 실행 실패 (0) | 2020.10.20 |
@Html 도우미가 생성하는 동안 MVC에서 'data-val-number'유효성 검사를 변경하는 방법 (0) | 2020.10.20 |
SQL ORDER BY 여러 값을 특정 순서로? (0) | 2020.10.20 |
getIntent () Extras 항상 NULL (0) | 2020.10.20 |