โดยปกติเมื่อฉันพยายามทำสิ่งนี้เป็นเพราะฉันต้องการตั้งค่าคุณสมบัติของฉันหรือปล่อยให้เป็นค่าเริ่มต้น ด้วยความช่วยเหลือของคำตอบและdynamic
ประเภทนี้เราสามารถสร้างวิธีการขยายสตริงได้อย่างง่ายดายเพื่อให้บรรทัดเดียวและเรียบง่าย
public static dynamic ParseAny(this string text, Type type)
{
var converter = TypeDescriptor.GetConverter(type);
if (converter != null && converter.IsValid(text))
return converter.ConvertFromString(text);
else
return Activator.CreateInstance(type);
}
ใช้แบบนั้น;
bd.Budget = objReader[i].ToString().ParseAny(typeof(double));
int intTest = "1234".ParseAny(typeof(int));
double doubleTest = "12.34".ParseAny(typeof(double));
decimal pass = "12.34".ParseAny(typeof(decimal));
decimal fail = "abc".ParseAny(typeof(decimal));
string nullStr = null;
decimal failedNull = nullStr.ParseAny(typeof(decimal));
ไม่จำเป็น
หมายเหตุด้านข้างหากเป็นเช่นนั้นSQLDataReader
คุณอาจใช้GetSafeString
ส่วนขยายเพื่อหลีกเลี่ยงข้อยกเว้นที่เป็นโมฆะจากผู้อ่าน
public static string GetSafeString(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader.GetString(colIndex);
return string.Empty;
}
public static string GetSafeString(this SqlDataReader reader, string colName)
{
int colIndex = reader.GetOrdinal(colName);
if (!reader.IsDBNull(colIndex))
return reader.GetString(colIndex);
return string.Empty;
}
ใช้แบบนั้น;
bd.Budget = objReader.GetSafeString(i).ParseAny(typeof(double));
bd.Budget = objReader.GetSafeString("ColumnName").ParseAny(typeof(double));