我有<p>{{email | hideEmail}}</p>
UserInformation
UserInformation对象如下所示;
List<UserInformation> ui = new List<UserInformation>();
有没有办法检查这些属性是否包含特定的Word?让我们说“.test”?
更新
我有点想避免像
这样的事情public class UserInformation
{
public UserInformation()
{
}
public UserInformation(UserInformation u)
{
this.Id = u.Id;
this.parentId = u.parentId;
this.Name = u.Name;
this.Title = u.Title;
this.Department = u.Department;
this.Image = u.Image;
this.Parent = u.Parent;
this.Username = u.Username;
this.Company = u.Company;
this.Initials = u.Initials;
this.Disabled = u.Disabled;
}
public int Id { get; set; }
public int? parentId { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string Department { get; set; }
public string Image { get; set; }
public string Parent { get; set; }
public string Username { get; set; }
public string Company { get; set; }
public string Initials { get; set; }
public bool Disabled { get; set; }
}
答案 0 :(得分:0)
您可以使用此方法使用反射来获取包含文本的所有属性:
public static IEnumerable<PropertyInfo> PropertiesThatContainText<T>(T obj, string text, StringComparison comparison = StringComparison.Ordinal)
{
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType == typeof(string) && p.CanRead);
foreach (PropertyInfo prop in properties)
{
string propVal = (string)prop.GetValue(obj, null);
if (String.Equals(text, propVal, comparison)) yield return prop;
}
}
如果您只是想知道是否至少有一个属性:
bool anyPropertyContainsText = PropertiesThatContainText(yourUserInfo, ".test").Any();
但总的来说,我会尽可能避免使用反射。而是在UserInformation
中创建一个方法,明确检查相关属性。或者只是检查它你必须知道它。有点冗长但可读,每个人都会理解你的代码,包括你自己。
答案 1 :(得分:0)
你可以像DavidG指出的那样使用运行时反射;
How to iterate all "public string" properties in a .net class
但如果您为大型数据集(即所有用户)执行此操作,这将会很慢 - 在这种情况下,更好的方法是使用T4模板生成代码;
https://msdn.microsoft.com/en-us/library/bb126445.aspx
或者在数据库中执行此操作(如果信息来自那里)或创建索引并使用像lucene这样的“搜索”引擎