c# - 将属性传递给 C# 中的方法

标签 c# c#-4.0 properties propertyinfo

我需要传递某些类型的属性选择(每次一种类型),假设这是我的类型:

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/

相关文章:

c# - 如何向现有 Winforms 控件添加属性

c# - 尝试通过安全透明方法访问安全关键类型失败

c# - Windows 服务无法启动(错误 1053)

generics - 具有顺序布局和包大小的值类型的通用列表-> BUG?

c# - 简单注入(inject)器 - 部分类注入(inject)

javascript - React 组件的 props 是如何异步更新的?

c# - 显示来自 ModelState.Values 的错误

c# - 如何防止四舍五入小数?

c# - 将 Unicode 字符串从 C# 发送到 SQL Server 2008 数据库

svn - 为什么 `svn blame Foo.cs` 返回的所有行都是空白的?