抱歉,我无法用语言真正解释我想要做什么,但是..
说我有 secnario。
public class TestClass
{
}
public class TestClass1 : TestClass, TestInterface<ValueClass1>
{
public ValueClass1 Property { get; set; }
}
public class TestClass2 : TestClass, TestInterface<ValueClass2>
{
public ValueClass2 Property { get; set; }
}
public interface TestInterface<T> where T : ValueClass
{
T Property { get; set; }
}
public class ValueClass
{
public int Id { get; set; }
}
public class ValueClass2 : ValueClass
{
}
我需要从一个包含和(以及更多)Property
的列表中获取一个值,但我不知道如何遍历列表并设置值。List<TestClass>
TestClass1
TestClass2
Property
所以这基本上就是我想要做的
List<TestClass> list = new List<TestClass>();
foreach (var item in list.OfType<????>())
{
item.Property = PropertyManager.GetProperty(item.Property.Id);
}
编辑:
我有许多具有共同属性的类,但我需要该Type
属性的实际值而不是base Type
(由于序列化等其他因素),并且我需要能够遍历主基类的列表并访问该属性.
就像我上面的例子一样,我只需Id
要从Property
.
目前每个班级都有自己的班级Property
,我正在Reflection
做我需要做的事情,我只是在寻找一个更清洁的解决方案。
编辑:
这是我目前的实现
public class TestClass
{
}
public class TestClass1 : TestClass
{
public ValueClass Property { get; set; }
}
public class TestClass2 : TestClass
{
public ValueClass2 Property { get; set; }
}
public class ValueClass
{
public int Id { get; set; }
}
public class ValueClass2 : ValueClass
{
}
并设置我必须使用反射的值
List<TestClass> list = new List<TestClass>();
foreach (var item in list.Where(x => x.GetType().GetProperty("Property") != null))
{
var property = item.GetType().GetProperty("Property");
property.SetValue(PropertyManager.GetProperty((property.GetValue(item) as ValueClass).Id));
}
这PropertyManager
只是Dictionary
一种ValueClass
类型
public static ValueClass GetProperty(int id)
{
if (_properties.Containskey(id))
{
return _properties[id];
}
return null;
}
所以我需要的是一种循环“TestClass”列表并填充任何具有ValueClass
Property
.
目前我认为Reflection
这是我唯一真正的选择。