0

当只有 Object 发生变化时,我几乎没有具有相同程序的功能。我试图为该组方法编写通用函数,但未能获得 T 的 ID。

你能帮我重构一下吗?

List<ObjectOfSomeKind> allObjects = new List<ObjectOfSomeKind>() { new ObjectOfSomeKind{ ID = 1}, new ObjectOfSomeKind { ID = 2 }};
List<ObjectOfSomeKind> objects = new List<ObjectOfSomeKind>();
            for (int i = 0; i < ids.Count(); i++)
            {
                int id = ids.ElementAt(i);
                ObjectOfSomeKind object = allObjects .Where(item => item.ID.Equals(id)).SingleOrDefault();
                if (object == null)
                {
                    throw new Exception("error");
                }

                objects.Add(object);
            }
4

1 回答 1

1

使用 ID 属性定义接口(或基类)

public interface IEntity
{
   int ID { get; set; }
}

通过你的类实现这个接口

public class Foo : IEntity
{
   public int ID { get; set; }
}

然后IEntity在您的代码中使用,或者(如果您想使用泛型)向您的泛型类或方法添加约束

where T : IEntity

更新如果你所有的类都有 ID 属性,你也可以使用dynamic对象(有时它也是解决方案,但我更喜欢编译时检查):

List<dynamic> allObjects = new List<dynamic>() { 
    new ObjectOfSomeKind{ ID = 1}, new ObjectOfSomeKind { ID = 2 }};
List<dynamic> objects = new List<dynamic>();

for (int i = 0; i < ids.Count(); i++)
{
    int id = ids.ElementAt(i);
    dynamic obj = allObjects.Where(item => item.ID.Equals(id)).SingleOrDefault();
    if (obj == null)                
        throw new Exception("error");                

    objects.Add(obj);
}
于 2013-02-12T08:41:58.180 回答