申し訳ありませんが、私が何をしようとしているのかを言葉で説明することはできませんが..
私がシナリオを持っているとしましょう。
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
、私の唯一の現実的なオプションと考えています。