C# 使用泛型进行重构
当只有一个对象发生变化时,我几乎没有具有相同类型过程的函数。 我试图为这组方法编写泛型函数,但未能获得T的ID 你能帮我重构这个吗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
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);
}