การจัดการสตริงว่าง / ว่าง

ก่อนที่ .NET 4 จะออก เราได้ทำสิ่งนี้เพื่อตรวจสอบสตริงว่าง / ว่าง :

String s;
if ((s + "").Trim().Length == 0)
{
    //do something
}

แม้ว่าวิธีการข้างต้นใช้งานได้ดีสำหรับเรา แต่ฉันรู้ว่าใน .NET 4 เรามีวิธี IsNullOrWhiteSpace เพื่อทำสิ่งที่คล้ายกัน

คำถามของฉันคืออันไหนดีกว่ากัน? เราควรเปลี่ยนไปใช้ฟังก์ชั่นในตัวแทนไหม?


person andri    schedule 17.03.2013    source แหล่งที่มา


คำตอบ (3)


บน. NET 4 ฉันจะใช้วิธีการในตัวอย่างแน่นอน ท้ายที่สุดแล้ว มันบอกว่าถูกต้องสิ่งที่คุณกำลังพยายามทำ

หากคุณติดอยู่ก่อน .NET 4 ทำไมไม่ใช้:

if (s == null || s.Trim() == "")

Or

if (s == null || s.Trim().Length == 0)

? ทั้งสองพูดสิ่งที่คุณต้องการบรรลุ

ฉัน จะไม่ ใช้การต่อสตริงที่นี่อย่างแน่นอน นอกเหนือจากประสิทธิภาพแล้ว คุณไม่สนใจการต่อสตริง เมื่อใดก็ตามที่คุณพบว่าโค้ดของคุณทำอะไรบางอย่างที่ไม่ได้เป็นส่วนหนึ่งของสิ่งที่คุณพยายามทำให้สำเร็จ คุณควรพยายามปรับปรุงโค้ดเพื่อให้อ่านง่าย

person Jon Skeet    schedule 17.03.2013
comment
เกิดอะไรขึ้นกับการต่อสตริง? มันแย่ขนาดนั้นเลยเหรอ? - person andri; 17.03.2013
comment
@andri: ไม่เป็นไรเมื่อคุณ ต้องการ เชื่อมต่อสตริง แต่คุณไม่ทำ คุณ เท่านั้น ใช้การต่อข้อมูลเพื่อหลีกเลี่ยงการจัดการการอ้างอิงที่เป็นโมฆะ นั่นไม่ดีเลย - person Jon Skeet; 17.03.2013
comment
ฉันคิดว่าฉันเข้าใจประเด็นของคุณที่นี่ แต่ในบางกรณี เรายังจำเป็นต้องประมวลผลสตริง Trimmed จริงๆ ด้วย (และเปลี่ยนให้เป็นสตริงว่างหากเป็น null) การต่อข้อมูลเพื่อหลีกเลี่ยง null ยังคงเป็นความคิดที่ไม่ดีสำหรับกรณีนั้นหรือไม่ - person andri; 18.03.2013
comment
ลืมความคิดเห็นก่อนหน้าของฉัน ฉันพบคำตอบแล้วที่นี่: stackoverflow.com/questions/416473/ - person andri; 18.03.2013

ฉันใช้ IsNullOrWhiteSpace เป็นการส่วนตัว ส่วนใหญ่เป็นเพราะการใช้ทำให้โค้ดอ่านได้ชัดเจนยิ่งขึ้น และรองรับกรณีต่างๆ ได้มากขึ้น (ส่วน WhiteSpace) ขึ้นอยู่กับความชอบของคุณ เพราะทั้งสองวิธีทำสิ่งเดียวกันได้ค่อนข้างดี

person Lemurr    schedule 17.03.2013

ทำไมไม่เขียนวิธีการช่วยเหลือเพื่อนำสิ่งที่ IsNullOrWhiteSpace ทำก่อน .NET 4 ไปใช้ล่ะ เหมือนกับ

public static boolean IsNullOrWhiteSpace(string input)
{
    return string.IsNullOrEmpty(input) || input.Trim() == string.Empty;
}

อย่าใช้การต่อข้อมูลที่นี่ตามที่จอนพูด ไม่ใช่แนวปฏิบัติที่ดีในการตรวจสอบค่าว่าง/ว่าง

person Kirin Yao    schedule 18.03.2013
comment
ใช่ จริงๆ แล้ว บางส่วน การใช้งานของเราใช้วิธีการช่วยเหลือ / ส่วนขยาย (และบางส่วนใช้โค้ดโดยตรงเหมือนกับตัวอย่างด้านบน :() - person andri; 18.03.2013
comment
@andri มันไม่เคยสายและคุ้มค่ากับการปรับโครงสร้างใหม่เสมอ :) - person Kirin Yao; 18.03.2013