C# 使用泛型进行重构

C# 使用泛型进行重构,c#,.net,C#,.net,当只有一个对象发生变化时,我几乎没有具有相同类型过程的函数。 我试图为这组方法编写泛型函数,但未能获得T的ID 你能帮我重构这个吗 List<ObjectOfSomeKind> allObjects = new List<ObjectOfSomeKind>() { new ObjectOfSomeKind{ ID = 1}, new ObjectOfSomeKind { ID = 2 }}; List<ObjectOfSomeKind> objects = n

当只有一个对象发生变化时,我几乎没有具有相同类型过程的函数。 我试图为这组方法编写泛型函数,但未能获得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);
            }
List allObjects=newlist(){newobjectofsomekind{ID=1},newobjectofsomekind{ID=2};
列表对象=新列表();
对于(int i=0;iitem.ID.Equals(ID)).SingleOrDefault();
if(object==null)
{
抛出新异常(“错误”);
}
对象。添加(对象);
}
使用ID属性定义接口(或基类)

public interface IEntity
{
   int ID { get; set; }
}
通过类实现此接口

public class Foo : IEntity
{
   public int ID { get; set; }
}
然后在代码中使用
IEntity
,或者(如果要使用泛型)向泛型类或方法添加约束

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

List allObjects=new List(){
somekind{ID=1}的新对象,somekind{ID=2}的新对象;
列表对象=新列表();
对于(int i=0;iitem.ID.Equals(ID)).SingleOrDefault();
if(obj==null)
抛出新异常(“错误”);
对象。添加(obj);
}

新对象{ID=1}
无效。。除非您创建了一个名为“Object”的类?在这种情况下,不要这样做。Object=objectofsomekindname对于程序员来说是一项非常关键的技能。学习它的好主意,而且要快!是的,这是我的第一个想法,但有没有办法避免公共接口?@eugeneK-nope,没有合法的方法(我的意思是没有思考)。为了具有公共属性,类应该具有公共接口(或基类)@eugeneK实际上还有
动态
(抱歉,忘了这一点)。
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);
}