間接参照の別のレイヤーを追加するだけです。
public void SomeMethod()
{
var listA = GetList("DataContext.ViewA");
var listB = GetList("DataContext.ViewB");
var listC = GetList("DataContext.ViewC");
}
public List<EntityObject> GetList(string dataContextName)
{
return (from x in GetSpecificSource(dataContextName)
where //Rest of where clause
select x).ToList();
}
public IEnumerable<MyType> GetSpecificSource(string dataContextName)
// Or: public IQueryable<MyType> GetSpecificSource(string dataContextName)
{
// ToDo: Return the correct source depending on the name. E.g.:
switch(dataContextName)
{
case "DataContext.ViewA":
return DataContext.ViewA;
case "DataContext.ViewB":
return DataContext.ViewB;
case "DataContext.ViewC":
return DataContext.ViewC;
}
}
リフレクションの使用方法に関する最新情報
目的の名前のフィールドから値を取得します。
var fieldName = "ViewA";
var fieldFound = type.GetField(fieldName, BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if(fieldFound != null)
{
return fieldFound.GetValue(instance);
}
目的の名前のプロパティから値を取得します。
var propertyName = "ViewA";
var propertyFound = type.GetProperty(propertyName, BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if(propertyFound != null)
{
return propertyFound.GetValue(instance, null);
}
目的の名前のメソッドから値を取得します。
var methodName = "ViewA";
var methodFound = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if(methodFound != null)
&& methodFound.GetParameters().Length == 0)
{
return methodFound.Invoke(instance, null);
}
これまでのところ、これらはいくつかの簡単な例です。リフレクションは、問題と質問の完全に新しいバッグを開きます。上記の例から始めて、それがあなたの欲求を満たしているかどうかを確認してください。それ以外の場合は、単に新しい質問で戻ってきます。;-)