Tôi nhìn vào yêu cầu của bạn và câu hỏi tốt hơn giây, nhưng cuối cùng tôi phải viết lại để hiểu rõ hơn về giải pháp. Và giải pháp này bỏ qua lâu nếu ngăn xếp và thay thế nó bằng cách tìm kiếm trên các loại enum, nơi chúng ta có thể thực hiện tất cả các loại những gì chúng ta cần. Tôi giống như sử dụng năng động, nhưng điều này là có thể sử dụng quá.
Chức năng chính GetValueByValidating
giá trị trả lại nếu là loại được xác định và có thể, trong những trường hợp khác trả về false Look Niranjan-kala đây là chức năng chính của bạn sau khi viết lại.
///
/// Enum of wanted types
///
public enum Types
{
[ExtendetFlags("int")]
INT,
[ExtendetFlags("decimal")]
DECIMAL,
[ExtendetFlags("double")]
DOUBLE,
[ExtendetFlags("real")]
REAL,
[ExtendetFlags("string")]
STRING,
[ExtendetFlags("object")]
OBJECT,
[ExtendetFlags("null")]
NULLABLE
}
///
/// Cycle by types when in enum exist string reference on type (helper)
///
///
///
public static Types GetCurrentType(string container)
{
foreach (Types t in Enum.GetValues(typeof(Types)))
{
if (container.Contains(t.GetFlagValue()))
{
return t;
}
}
return Types.NULLABLE;
}
///
/// Return object converted to type
///
///
///
///
public static object GetValueByValidating(string strCurrentDatatype, object valueObj)
{
var _value = valueObj != null ? valueObj : null;
try
{
Types _current = _value != null ? GetCurrentType(strCurrentDatatype.ToLower()) : Types.NULLABLE;
switch (_current)
{
case Types.INT:
valueObj = Convert.ToInt32(valueObj);
break;
case Types.DECIMAL:
valueObj = Convert.ToDecimal(valueObj);
break;
case Types.DOUBLE:
valueObj = Convert.ToDouble(valueObj);
break;
case Types.REAL:
valueObj = Convert.ToDouble(valueObj);
break;
case Types.STRING:
valueObj = Convert.ToString(valueObj);
break;
case Types.OBJECT:
break;
case Types.NULLABLE:
throw new InvalidCastException("Type not handled before selecting, function crashed by retype var.");
}
} catch (InvalidCastException ex)
{
Log.WriteException(ex);
valueObj = false;
}
return valueObj;
}
Nguồn
2016-03-23 08:21:30
trên ghi chú thay vì tất cả những điều này nếu elses tôi nói thực hiện một nghiên cứu nhỏ về chuyển đổi http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.80). aspx – RhysW
@RhysW +1 cho chuyển đổi, nhưng trong trường hợp này, 'else' không được yêu cầu,' if' sẽ đủ. –
là u chắc chắn nếu bạn phải trả lại chỉ một vài loại tiêu chuẩn như int, chuỗi vv? hoặc là nó nhiều lớp học từ mã ur? – nawfal