[c#] null 가능성이있는 개체에 대해 ToString을 수행하는 방법은 무엇입니까?
다음을 수행하는 간단한 방법이 있습니까?
String s = myObj == null ? "" : myObj.ToString();
다음을 수행 할 수 있다는 것을 알고 있지만 실제로는 해킹으로 간주합니다.
String s = "" + myObj;
Convert.ToString ()에 적절한 오버로드가 있으면 좋을 것입니다.
답변
C # 6.0 편집 :
C # 6.0에서는 이제 간결하고 캐스트없는 버전의 orignal 메서드를 사용할 수 있습니다.
string s = myObj?.ToString() ?? "";
또는 보간을 사용하여 :
string s = $"{myObj}";
원래 답변 :
string s = (myObj ?? String.Empty).ToString();
또는
string s = (myObjc ?? "").ToString()
더 간결하게합니다.
불행히도 지적했듯이 비 String 또는 Object 유형에서이 작업을 수행하려면 양쪽에 캐스트가 필요한 경우가 많습니다.
string s = (myObjc ?? (Object)"").ToString()
string s = ((Object)myObjc ?? "").ToString()
따라서 우아하게 보일 수 있지만 캐스트는 거의 항상 필요하며 실제로는 그렇게 간결하지 않습니다.
다른 곳에서 제안했듯이 확장 방법을 사용하여 더 깔끔하게 만드는 것이 좋습니다.
public static string ToStringNullSafe(this object value)
{
return (value ?? string.Empty).ToString();
}
답변
string.Format("{0}", myObj);
string.Format은 null을 빈 문자열로 형식화하고 null이 아닌 객체에서 ToString ()을 호출합니다. 내가 이해했듯이 이것은 당신이 찾고 있던 것입니다.
답변
Convert.ToString ()에 적절한 오버로드가 있으면 좋을 것입니다.
가있었습니다 Convert.ToString(Object value)
닷넷 2.0 이후 (약 오년 전에 질문을 받았다이 Q.) 당신이 원하는 것을 정확히 할 나타납니다 :
http://msdn.microsoft.com/en-us/library/astxcyeh(v=vs.80).aspx
내가 여기서 정말 명백한 것을 놓치고 있거나 잘못 해석하고 있습니까?
답변
확장 메서드를 사용하면 다음을 수행 할 수 있습니다.
public static class Extension
{
public static string ToStringOrEmpty(this Object value)
{
return value == null ? "" : value.ToString();
}
}
다음은 화면에 아무것도 쓰지 않고 예외를 throw하지 않습니다.
string value = null;
Console.WriteLine(value.ToStringOrEmpty());
답변
나는 이것에 동의하지 않는다 :
String s = myObj == null ? "" : myObj.ToString();
어떤 식 으로든 해킹입니다. 명확한 코드의 좋은 예라고 생각합니다. 달성하려는 것이 무엇인지 그리고 null을 기대하고 있다는 것은 절대적으로 분명합니다.
최신 정보:
나는 당신이 이것이 해킹이라고 말하지 않았 음을 알았습니다. 그러나 당신이이 방법이 갈 길이 아니라고 생각한다는 것은 질문에 내포되어 있습니다. 제 생각에는 확실히 가장 명확한 해결책입니다.
답변
string s = String.Concat(myObj);
내가 추측하는 가장 짧은 방법이며 성능 오버 헤드도 무시할 수 있습니다. 의도가 무엇인지 코드 독자에게 명확하지 않을 수 있지만 명심하십시오.
답변
사실 나는 당신이 무엇을하고 싶은지 이해하지 못했습니다. 내가 이해했듯이이 코드를 이와 같은 다른 방식으로 작성할 수 있습니다. 이건 물어 보는 건가요? 더 설명해 주시겠습니까?
string s = string.Empty;
if(!string.IsNullOrEmpty(myObj))
{
s = myObj.ToString();
}