以下函数需要查看输入对象的内部,如果它有一个属性,它返回一个自定义对象,它也需要修剪该对象。下面的代码适用于输入对象,但不会递归查看返回自定义对象并执行修剪过程的属性。作出函数递归
public object TrimObjectValues(object instance)
{
var props = instance.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
// Ignore non-string properties
.Where(prop => prop.PropertyType == typeof(string) | prop.PropertyType == typeof(object))
// Ignore indexers
.Where(prop => prop.GetIndexParameters().Length == 0)
// Must be both readable and writable
.Where(prop => prop.CanWrite && prop.CanRead);
foreach (PropertyInfo prop in props)
{
if (prop.PropertyType == typeof(string))
{
string value = (string)prop.GetValue(instance, null);
if (value != null)
{
value = value.Trim();
prop.SetValue(instance, value, null);
}
}
else if (prop.PropertyType == typeof(object))
{
TrimObjectValues(prop);
}
}
return instance;
}
我需要以某种方式改变这种寻找其他对象的初始对象内部
.Where(prop => prop.PropertyType == typeof(string) | prop.PropertyType == typeof(object))
此代码是不工作的原因是一个例子,对象我传递作为输入具有返回一个“Address”类型的属性,因此typeof(object)永远不会被命中。
下面是数据再次进行测试树传递给函数“O”在这种情况下
Order o = new Order();
o.OrderUniqueIdentifier = "TYBDEU83e4e4Ywow";
o.VendorName = "Kwhatever";
o.SoldToCustomerID = "Abc98971";
o.OrderType = OrderType.OnOrBefore;
o.CustomerPurchaseOrderNumber = "MOOMOO 56384";
o.EmailAddress = "[email protected]";
o.DeliveryDate = DateTime.Now.AddDays(35);
Address address1 = new Address();
//address1.AddressID = "Z0mmn01034";
address1.AddressID = "E0000bbb6 ";
address1.OrganizationName = " Nicks Organization ";
address1.AddressLine1 = " 143 E. WASHINGTON STREET ";
address1.City = " Rock ";
address1.State = "MA ";
address1.ZipCode = " 61114";
address1.Country = "US ";
o.ShipToAddress = address1;
@Darin无遗憾的是它仍然犯规了解筛选自定义对象。我需要一个通用的方法来做到这一点。 – 2012-03-14 18:07:08
什么定义了“自定义对象”?你为什么不放弃“其他”的情况呢? – Michael 2012-03-14 18:07:33
我有一个对象,例如称为地址它拥有地址数据。我有一个名为Order in Order的对象,有一个名为orderAddress的属性,返回类型Address。 – 2012-03-14 18:11:41