先放出源码:
public static class StringExtensions
{
// Methods
public static TValue As<TValue>(this string value)
{
return value.As<TValue>(default(TValue));
}
public static TValue As<TValue>(this string value, TValue defaultValue)
{
try
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(TValue));
if (converter.CanConvertFrom(typeof(string)))
{
return (TValue) converter.ConvertFrom(value);
}
converter = TypeDescriptor.GetConverter(typeof(string));
if (converter.CanConvertTo(typeof(TValue)))
{
return (TValue) converter.ConvertTo(value, typeof(TValue));
}
}
catch (Exception)
{
}
return defaultValue;
}
public static bool AsBool(this string value)
{
return value.As<bool>(false);
}
public static bool AsBool(this string value, bool defaultValue)
{
return value.As<bool>(defaultValue);
}
public static DateTime AsDateTime(this string value)
{
return value.As<DateTime>();
}
public static DateTime AsDateTime(this string value, DateTime defaultValue)
{
return value.As<DateTime>(defaultValue);
}
public static decimal AsDecimal(this string value)
{
return value.As<decimal>();
}
public static decimal AsDecimal(this string value, decimal defaultValue)
{
return value.As<decimal>(defaultValue);
}
public static float AsFloat(this string value)
{
return value.As<float>();
}
public static float AsFloat(this string value, float defaultValue)
{
return value.As<float>(defaultValue);
}
public static int AsInt(this string value)
{
return value.As<int>();
}
public static int AsInt(this string value, int defaultValue)
{
return value.As<int>(defaultValue);
}
public static bool Is<TValue>(this string value)
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(TValue));
return (((converter != null) && converter.CanConvertFrom(typeof(string))) && converter.IsValid(value));
}
public static bool IsBool(this string value)
{
return value.Is<bool>();
}
public static bool IsDateTime(this string value)
{
return value.Is<DateTime>();
}
public static bool IsDecimal(this string value)
{
return value.Is<decimal>();
}
public static bool IsEmpty(this string value)
{
return string.IsNullOrEmpty(value);
}
public static bool IsFloat(this string value)
{
return value.Is<float>();
}
public static bool IsInt(this string value)
{
return value.Is<int>();
}
}
其实,这个string扩展是微软Asp.net webpages 开发中的一个辅助类,但是现在的项目没有用到asp.net webpages相关开发及其razor;该类存在于System.Web.WebPages中,如果直接引用该程序集,焉是杀鸡用牛刀?
如果自己写一个string扩展类也不难,但是我是直接通过reflector反编译过来借用了。
