namespace DObject.DType
{
/// <summary>
/// 綾誨瀷杞崲甯姪綾伙紝闈欐佹柟娉曞疄鐜般傚姞鍏ヤ簡緙撳瓨鏈哄埗錛屽噺灝戝弽灝勬鏁般?br />
/// </summary>
public static class StaticConvertor
{
private const string CONVERTMETHOD = "TryParse";
private static Dictionary<System.Type, MethodInfo> map = new Dictionary<System.Type, MethodInfo>(20);
private static MethodInfo prepareMethod(System.Type type)
{
lock (map)
{
if (!map.ContainsKey(type))
{
System.Type[] typeArray = new System.Type[2];
typeArray.SetValue(typeof(string), 0);
typeArray.SetValue(type.GetType().MakeByRefType(), 1);
MethodInfo method = type.GetType().GetMethod(CONVERTMETHOD, typeArray);
if (method != null)
{
map.Add(type, method);
}
else
return null;
}
return map[type];
}
} //end prepareMethod
/// <summary>
/// 杞崲鏂規硶
/// </summary>
/// <typeparam name="T">杞崲鍚庣被鍨?/span></typeparam>
/// <param name="raw">鍘熷瀵硅薄</param>
/// <param name="defaultValue">榛樿鍊?/span></param>
/// <param name="convertSuccessful">鏄惁杞崲鎴愬姛</param>
/// <returns>榪斿洖鍊?/span></returns>
public static T Convert<T>(object raw, T defaultValue, out bool convertSuccessful) where T : struct
{
convertSuccessful = false;
if (raw == null) //澶辮觸
return defaultValue;
else if (raw is T) //鎴愬姛
{
convertSuccessful = true;
return (T)raw;
}
else
{
try
{
object[] parms = new object[2];
parms[0] = raw.ToString();
parms[1] = 0;
bool isparser = (bool)prepareMethod(typeof(T)).Invoke(null, parms);
if (isparser) //鎴愬姛
{
convertSuccessful = true;
return (T)parms[1];
}
}
catch
{
}
return defaultValue;
}
} //end Convert<T>
}
}
浠ヤ笂浠g爜鐨勫啓娉曪紝閫傚悎DateTime,Int32,Int64,Int16,byte,bool絳夈傚彧鏈夋槸struct緇撴瀯錛屽茍涓旀湁TryParse鏂規硶灝卞彲浠ヤ嬌鐢ㄣ傝屼嬌鐢ㄨ搗鏉ュ憿涔熷緢綆鍗曪紝濡備互涓嬩唬鐮?br />
namespace DObject.DType
{
/// <summary>
/// Int32綾誨瀷淇濊瘉
/// </summary>
public class DInt32 : DObject, IValuetable<Int32>, IConvertSuccess
{
private int target;
private int defaultValue = -1;
/// <summary>
/// 鏋勯犲嚱鏁幫紝瀵硅薄鍒濆鍖栨椂錛屽氨鎵ц杞崲
/// </summary>
/// <param name="o"></param>
public DInt32(object o)
: base(o)
{
target = StaticConvertor.Convert<int>(base.raw, defaultValue, out convertSuccessful);
}
public static implicit operator DInt32(DType type)
{
return new DInt32(type.RawObject);
}
private bool convertSuccessful;
/// <summary>
/// 榪斿洖杞崲鍊?br />
/// </summary>
/// <returns>榪斿洖杞崲鍊鹼紝濡傛灉杞崲鎴愬姛鍒欒繑鍥炲鹼紱杞崲澶辮觸榪斿洖榛樿鍊?nbsp;-1</returns>
public int Value()
{
return Value(defaultValue);
}
/// <summary>
/// 榪斿洖杞崲鍊?br />
/// </summary>
/// <param name="defaultValue">榛樿鍊?/span></param>
/// <returns>榪斿洖杞崲鍊鹼紝濡傛灉杞崲鎴愬姛鍒欒繑鍥炲鹼紱杞崲澶辮觸榪斿洖榛樿鍊?/span></returns>
public int Value(int defaultValue)
{
if (convertSuccessful)
return target;
return defaultValue;
}
/// <summary>
/// 鏄惁杞崲鎴愬姛
/// </summary>
public bool ConvertSuccess
{
get { return convertSuccessful; }
}
}
}
/// <summary>
/// 鏋勯犵被鍨嬶紝涓哄唴緗被鍨嬫彁渚涙瀯閫犲弬鏁般?br />
/// <example>
/// DInt32 int32 = DType.Default("123");
/// </example>
/// </summary>
public class DType
{
private object o;
private DType(object o)
{
this.o = o;
}
/// <summary>
/// 鎻愪緵瀵硅薄鏋勯犲弬鏁?br />
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static DType Default(object o)
{
return new DType(o);
}
/// <summary>
/// 鍘熷瀵硅薄
/// </summary>
public object RawObject
{
get { return o; }
}
}
浣跨敤璧鋒潵涔熸槸綆鍗曪細
DInt32 int32 = DType.Default("123");
int val = int32.Value();
Java閲屽氨娌¤繖鏍風殑浜嗭紝浣跨敤try鎹曡幏閿欒騫墮潪鎯寵鐨勩俲ava閲屾病鏈塻truct錛屼絾鏄湁涓被鍨婲umber紜槸鍙互浣跨敤銆傚綋鐒訛紝榪欏氨涓嶈兘鍍廋#涓鏍峰皢涔變竷鍏碂鐨勪笢瑗塊兘鏁翠竴鍧椾簡錛岃鍒嗗紑鏉ュ鐞嗕簡銆?br />
/**
*
* @author yurow
*/
public class DNumber extends DObject {
/**
* Create new instance of DNumber
*/
protected DNumber() {
super();
}
protected DNumber(Object obj)
{
super(obj);
}
protected Boolean isconvert;
public Number Convert(Number defaultValue) {
isconvert = false;
if (obj == null) {
return defaultValue;
} else if (obj instanceof Number) {
isconvert = true;
return Number.class.cast(obj);
} else {
return defaultValue;
}
}
}
/**
*
* @author yurow
*/
public class DInt32 extends DNumber {
/**
* Create new instance of DInt32
*/
protected DInt32() {
super();
}
protected DInt32(Object obj) {
super(obj);
}
public static DInt32 newInt32(Object obj) {
return new DInt32(obj);
}
public int Convert()
{
return super.Convert(-1).intValue();
}
}
鍙互鐪嬪嚭錛孞AVA鐨勭被鍨嬮昏緫灞傛鍒掑垎姣擟#瑕佺粏鑷達紝澶勭悊璧鋒潵褰撶劧瑕佸鏉備竴浜涖傚彲瑙佺矑搴﹀茍闈炶秺緇嗚秺濂姐傝傳閬撶湅鏉AVA鍊懼悜浜庢寜閫昏緫鍒掑垎錛岃孋#鍊懼悜浜庢寜鍐呭瓨甯冨眬鍒掑垎銆?

]]>