我正在尝试使用linq表达式来验证我的MVC代码中的电话号码。代码看起来像这样:在linq表达式中获取属性值
class Person
{
public HomePhone { get; set; }
}
class Employee
{
public WorkPhone { get; set; }
}
class Office
{
Employee Boss { get; set; }
}
class PersonController : Controller
{
private static ValidatePhoneNumber<M>(Exression<Func<M,string>> propExpr)
{
var member = prop.Body as MemberExpression;
if (member == null)
{
throw new ArgumentException("expression must be a member expression, i.e., x => x.MyProperty");
}
var propInfo = member.Member as PropertyInfo;
if (propInfo == null)
{
throw new ArgumentException("expression is not a property type.");
}
var getter = propExpr.Compile();
string phoneStr = getter(); //this doesn't work
if(!/* ... phoneStr is valid phone number */)
{
var propName = propInfo.Name;
ModelState[propName] = "invalid format for phone number";
}
}
public ActionResult Create(Person p)
{
ValidatePhoneNumber(p => p.HomePhone);
if(ModelState.IsValid)
....
}
public ActionResult CreatOffice(Office o)
{
ValidatePhoneNumber(o => o.Boss.WorkPhone);
if(ModelState.IsValid)
....
}
}
我无法完全掌握这里所需的语法。我需要做什么才能让我有一个函数传入成员属性表达式,并且可以访问该属性的名称及其值。
我不认为你提供的代码可以编译(没有我不是在谈论'....')。这是你试图解决你的问题的实际代码? – 2012-02-08 00:37:34
为什么当有很多方法来验证属性时,你想重新发明轮子? – Eranga 2012-02-08 00:40:25