在泛型方法中访问对象的属性

ask*_*ker 3 c#

如何在泛型方法中访问对象的属性?
我无法使用,where T: A因为此方法将接收不同的对象,但所有对象都有一个共同的属性来处理.
(我也不能为他们制作一个通用界面)

public class A
{
    public int Number {get;set;}
}


List<A> listA = new List<A>{
                new A {Number =4},
                new A {Number =1},
                new A {Number =5}
};

Work<A>(listA);

public static void Work<T>(List<T> list1)
{
    foreach(T item in list1)
    {
        do something with item.Number;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:我还需要设置属性

Mar*_*ers 8

你有几个选择:

  • 制作一个通用界面.
  • 使用反射.
  • 在.NET 4中使用动态类型.

我知道你说你不能做第一个,但它是性能和可维护性的最佳选择所以请在选择其他方法之前重新考虑是否可能.请记住,即使您无法修改原始代码,您仍然可以选择第一个选项.例如,如果您的类是部分类,则可以在另一个文件中实现该接口:

档案1:

// Automatically generated code that you can't change.
partial class A
{
    public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

文件2:

interface IHasNumber
{
    int Number { get; set; }
}

partial class A : IHasNumber
{
}
Run Code Online (Sandbox Code Playgroud)

如果原始类未定义为partial,则可以围绕它们编写实现接口的包装类.

拥有通用接口后,您可以更改通用约束以要求此接口:

where T : IHasNumber
Run Code Online (Sandbox Code Playgroud)