重构到扩展方法(3):支持链式写法,让我们疯狂的点点点
什么是链式写法?
就是Linq那样的,不停的点点点。比如collection.Where(o=>o.id==0).FirstOrDefault();
如何实现链式写法?
关键就是要Return!
1. 链式写法,String.IsNullOrEmpty(),写起来很顺,"".IsNullOrEmpty()而不是String.IsNullOrEmpty("")
public static bool IsNullOrEmpty(this string str)
{
return String.IsNullOrEmpty(str);
}
2. 链式写法,判断是否为空
public static bool IsNull(this object obj)
{
return obj == null;
}
3. 链式写法,替换as运算符
public static T As<T>(this object obj)
{
if (obj.IsNull())
throw new ArgumentNullException("obj");
return obj is T ? (T)obj : default(T);
}
4. 链式写法,对象不停的做事。
public static T Action<T>(this T target, Action<T> action)
{
action(target);
return target;
}
5. 得到类型的默认值,等同于default(T),可得到的是Type对象咋办?用这个扩展方法。
public static class TypeExtension
{
public static object GetDefaultValue(this Type type)
{
var typeCode = Type.GetTypeCode(type);
return GetDefualtValue(typeCode);
}
public static object GetDefualtValue(TypeCode typeCode)
{
switch (typeCode)
{
case TypeCode.Boolean:
return default(Boolean);
case TypeCode.Byte:
return default(Byte);
case TypeCode.Char:
return default(Char);
case TypeCode.DateTime:
return default(DateTime);
case TypeCode.DBNull:
return default(DBNull);
case TypeCode.Decimal:
return default(Decimal);
case TypeCode.Double:
return default(Double);
case TypeCode.Empty:
return null;
case TypeCode.Int16:
return default(Int16);
case TypeCode.Int32:
return default(Int32);
case TypeCode.Int64:
return default(Int64);
case TypeCode.Object:
return default(Object);
case TypeCode.SByte:
return default(SByte);
case TypeCode.Single:
return default(Single);
case TypeCode.String:
return default(String);
case TypeCode.UInt16:
return default(UInt16);
case TypeCode.UInt32:
return default(UInt32);
case TypeCode.UInt64:
return default(UInt64);
default:
return null;
}
}
}

浙公网安备 33010602011771号