源于一次面试中的面试题,代码如下所示:
public class Product
{
public string Name { get; set; }
public string Description { get; set; }
public void Validate1()
{
if (string.IsNullOrEmpty(this.Name))
{
throw new Exception("请输入名称");
}
if (string.IsNullOrEmpty(this.Description))
{
throw new Exception("产品描述不能为空");
}
}
public void Validate2()
{
this.Require(x => x.Name, "请输入名称");
this.Require(x => x.Description, "产品描述不能为空");
}
}
知识兔要求就是实现这个Require的方法来达到和Validate1方法一样的效果。
方法一,Func实现:
private void Require(Func<Product, string> p, string v)
{
string value = p.Invoke(this);
if (string.IsNullOrEmpty(value))
{
throw new Exception(v);
}
}
知识兔方法二,Expression<Func>实现:
private void Require(Expression<Func<Product, string>> p, string v)
{
string value = p.Compile()(this);
if (string.IsNullOrEmpty(value))
{
throw new Exception(v);
}
}
知识兔这个题目算是完成了,其实我原本也不会这样玩的,多亏了867095512群里的大佬啊[滑稽]