C#中,一个类里有三个属性,如何获得其中特定的一个属性的名字呢?
对于你的要求:属性名字是不固定的,所以我们只能根据属性其他方面的特征来得到这个属性的名字,比如访问修饰符 属性类型,而方法修饰符在这个类中已经重复了,所以只能根据属性类型。
所以我们首先先得到所有的属性,然后遍历该属性集合,如果属性为Int32类型 就说明该属性是我们要的属性。
然后得到该属性的名字赋给str。
代码示例:
public void MyMethod()
{
string str;
//首先得到该类的所有属性
System.Reflection.PropertyInfo[] ps = this.GetType().GetProperties();
//遍历该属性集合
foreach (System.Reflection.PropertyInfo property in ps)
{
//如果类型为Int32 就是该属性
if (property.PropertyType.ToString()=="System.Int32")
{
//得到该属性的名字 赋给变量
str = property.Name;
}
}
}
C#中使用propertyGridView如何实现如下效果就是如果有字段为空值则不对其进行显示
public class Test
{
[CategoryAttribute("C1"), DisplayName("属性1"), Browsable(true)]
public string T1 { get; set; }
[CategoryAttribute("C1"), DisplayName("属性2"), Browsable(true)]
public string T2 { get; set; }
[CategoryAttribute("C2"), DisplayName("属性3"), Browsable(true)]
public string T3 { get; set; }
[CategoryAttribute("C2"), DisplayName("属性4"), Browsable(true)]
public string T4 { get; set; }
[CategoryAttribute("C3"), DisplayName("属性5"), Browsable(true)]
public string T5 { get; set; }
[CategoryAttribute("C3"), DisplayName("属性6"), Browsable(true)]
public string T6 { get; set; }
[CategoryAttribute("C4"), DisplayName("属性7"), Browsable(true)]
public string T7 { get; set; }
}
Test t = new Test();
// t.T3 = "123";
t.T5 = "321312";
t.T7 = "13213";
Type type = typeof(System.ComponentModel.CategoryAttribute);
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(t);
PropertyInfo[] pArr = typeof(Test).GetProperties();
Dictionary<string, bool> a = new Dictionary<string, bool>();
Dictionary<string, List<PropertyInfo>> b = new Dictionary<string, List<PropertyInfo>>();
foreach (var property in pArr)
{
AttributeCollection attrs = props[property.Name].Attributes;
FieldInfo fld = type.GetField("categoryValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
string key = fld.GetValue(attrs[type]).ToString();
if (b.ContainsKey(key))
{
b[key].Add(property);
}
else
{
b.Add(key, new List<PropertyInfo>() { property });
}
if (a.ContainsKey(key))
{
if (!a[key])
{
object value = property.GetValue(t, null);
a[key] = value != null;
}
}
else
{
object value = property.GetValue(t, null);
a.Add(key, value != null);
}
}
Type browsableType = typeof(System.ComponentModel.BrowsableAttribute);
foreach (var item in b)
{
if (a[item.Key])
{
continue;
}
foreach (var prop in item.Value)
{
AttributeCollection attrs = props[prop.Name].Attributes;
FieldInfo fld = browsableType.GetField("browsable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
fld.SetValue(attrs[browsableType], false);
}
}
propertyGrid1.SelectedObject = t;
Entity Framework框架这段代码什么意思
Entity Framework 对象删除的时候 是直接提交更改 包括增删改
上面代码中的增删改 是把对象做相应的标记EntityState.Added 相当于待添加
这样并不是马上就添加 而是提交SaveChanges()时做相应的增删改
LoadEntities 这个的话 就是一个自定义Where查询