Вернуть Enum или Class из Dictionary<string, object>

140
05 октября 2018, 20:40

Помогите адаптировать методы для C# из Java (методы используются в расширении базового Dictionary. Тема здесь.):

public <A> A getObject(final String key, final Class<A> type)
{
    final Object val = get(key);
    if (val == null || !type.isAssignableFrom(val.getClass()))
        return null;
    return (A) val;
}
public <E extends Enum<E>> E getEnum(final String name, final Class<E> enumClass)
{
    final Object val = get(name);
    if (val != null && enumClass.isInstance(val))
        return (E) val;
    if (val instanceof String)
        return Enum.valueOf(enumClass, (String) val);
    throw new IllegalArgumentException("Enum value of type " + enumClass.getName() + "required, but found: " + val + ".");
}

Для первого метода я использую следующую реализацию:

public object getObject(string key, Type type)
{
    object val = this[key];
    if (val == null || !type.IsAssignableFrom(val.GetType()))
        return null;
    return val;
}

Но у неё есть один недостаток - нужно постоянно указывать тип получаемого объекта. Выглядит это так:

Version _build = (Version) set.getObject("buildVersion", typeof(Version));
Answer 1

А почему бы не просто

public T GetObject<T>(string key) where T:class
{
    return this[key] as T;  
}

Вызов будет как

var build = set.GetObject<Version>("buildVersion");
READ ALSO
Чтение из C# Stream в коде C++

Чтение из C# Stream в коде C++

Есть ли способ прочитать данные из Stream, созданного в C# в unmanaged C++ коде? Заранее благодарен)

172
Почему VS ругается на синтаксис SQL запроса но все равно его выполняет?

Почему VS ругается на синтаксис SQL запроса но все равно его выполняет?

Только изучаю студию, решил исследовать возможности встроенного Server Explorer на предмет хватит ли его на простые операции типа добавить таблицу,...

177
EF lazy loading

EF lazy loading

Столкнулся с такой проблемойСтоит lazy loading в конструкторе контекста (db first) Когда вытаскиваю запись с базы то вместе с ней приходят все navigation...

142
Полиморфизм модификаторы new и virtual/override

Полиморфизм модификаторы new и virtual/override

Подскажите, пожалуйста, почему вызов метода с модификатором new не является полиморфным, а с модификаторами virtual/override является?

161