Например, вы можете получить доступ к элементу списка по индексу. Пример:
var managingString = new ManagingModel<string>();
var managingInt = new ManagingModel<int>();
var managingDouble = new ManagingModel<double>();
var list = new List<IStorage>();
list.Add(managingString);
list.Add(managingInt);
list.Add(managingDouble);
Попытка бросить «в» данной модели с помощью индекса:
var backToManagingModel = list[1] as ManagingModel<int>;
if (backToManagingModel != null)
{
var get = backToManagingModel.Get;
}
Если backToManagingModel является недействительным после заброса, то это время отливают неправильного типа, в противном случае разливка успешен, и вы можете получить вашей собственности.
Редактировать: Как же вообще не использовать дженерики, а просто использовать объект?
public static string GetString()
{
return "xyz";
}
public interface IStorage
{
Func<object> Get { get; set; }
}
public class ManagingModel : IStorage
{
public Func<object> Get { get; set; }
}
Вам не нужно будет проверять все типы, просто позвоните list[index].Get
var managingString = new ManagingModel
{
Get = new Func<string>(GetString)
};
var list = new List<IStorage>();
list.Add(managingString);
var get = list[1].Get;
Вы должны указать имя собственности –
Как вы знаете, какой тип вам нужно? Что такое код вызова, связанный с 'Func'? –
Enigmativity
@Enigmativity, пользователь моего кода создаст экземпляр 'ManagingModel', и используя функцию 'Get', я получу некоторые объекты (это не имеет значения, с какой целью) –