我需要传递某些类型的属性选择(每次一种类型),假设这是我的类型:
public class Product {
[PrimaryKey]
public long Id { get; set; }
[DisplayName("Name")]
public string Title { get; set; }
[Foreignkey(Schema = "Products", Table = "MajorCategory", Column = "Id")]
[DisplayName("MCat")]
public string MajorCategory { get; set; }
[Foreignkey(Schema = "Products", Table = "Category", Column = "Id")]
[DisplayName("Cat")]
public string Category { get; set; }
public long CategoryId { get; set; }
[BoolAsRadio()]
public bool IsScanAllowed { get; set; }
}
所以我需要一种方法将此类型的属性列表传递给其他类型(目标类型),并使用属性名称和属性,并且我不需要值,类似于以下伪代码:
List<Property> propertyList = new List<Property>();
propertyList.Add(Product.Id);
PropertyList.Add(Product.Title);
TargetType target = new TargetType();
target.Properties = propertyList;
public class TargetType {
public List<Property> Properties { get; set;}
GetAttributes() {
foreach(Property item in Properties){
Console.WriteLine(item.Name)
//Get Attributes
}
}
}
有没有办法像 Product.Id
一样传递并使用它的名称和属性?我不确定,但也许 PropertyInfo
可以提供帮助,我认为只是可以传递对象列表,但在那种情况下我不能使用属性和名称,你有什么建议来处理这个问题?或类似的东西?如果我完全错了,我该如何实现呢?
最佳答案
有趣的是,我只是在回答一个类似的问题,或者至少我认为是。
看起来您正在尝试将两种类型的属性连接成一种类型?您需要一个 ExpandoObject:
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject%28v=vs.100%29.aspx
有关嵌套合并的实现,请参见:
C# deep/nested/recursive merge of dynamic/expando objects
基本上,您需要一个键控的属性列表作为开始。以下代码将为任何 .NET 对象执行此操作:
var props = object.GetType().GetProperties().ToDictionary<PropertyInfo, string>(prop => prop.Name);
然后这取决于您想要实现的确切目标 - 对象的真实副本、与另一个对象合并,或者只是维护列表。
关于c# - 将属性传递给 C# 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205026/