Архивы: generic

EF и Generic

Оставляю кусочек кода себе на память. Универсальный, но в моем случае требует костылей.

#region Generic
        public void CreateLang<tmodel>(TModel langModel, out IEnumerable<revisionobject> diff)
        {
            Type entityType = this.TypesModelEntity[typeof(TModel)]; //вот костыль
            var langType = this.TypesEntityLang[entityType]; //и еще один
 
            Type genericClass = typeof(EFLangRepository< ,,>);
            Type constructedClass = genericClass.MakeGenericType(typeof(TModel), entityType, langType);
 
            object repo = Activator.CreateInstance(constructedClass);
 
            diff = new List</revisionobject><revisionobject>();
            object[] args = new object[] { langModel, diff };
 
            MethodInfo magicMethod = constructedClass.GetMethod("CreateLang");
            object magicValue = magicMethod.Invoke(repo, args);
            diff = args[1] as List</revisionobject><revisionobject>;
        }
        #endregion
</revisionobject></tmodel>

Читать далее »

Enum to Dictionary с локализацией

Пример про локализацию
http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html

Пример с приведением enum к dictionary без лишних заморочек
http://stackoverflow.com/questions/5583717/enum-to-dictionary-c-sharp

var dict = Enum.GetValues(typeof(typFoo))
               .Cast<typFoo>()
               .ToDictionary(t => (int)t, t => t.ToString() );

Пример с generic-методом для enum
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum

public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
   if (!typeof(T).IsEnum) 
   {
      throw new ArgumentException("T must be an enumerated type");
   }
 
   //...
}
public abstract class EnumClassUtils<TClass>
where TClass : class
{
 
    public static TEnum Parse<TEnum>(string value)
    where TEnum : struct, TClass
    {
        return (TEnum) Enum.Parse(typeof(TEnum), value);
    }
 
}
 
public class EnumUtils : EnumClassUtils<Enum>
{
}

Наконец, собранное воедино — generic-метод, преобразующий enum к словарю на нужном языке. Может быть, надо доработать.

public static Dictionary<int, String> TranslateEnum<TEnum>() where TEnum : struct, IConvertible
        {
            if (!typeof(TEnum).IsEnum)
            {
                throw new ArgumentException("TEnum must be an enumerated type");
            }
 
            var lang = typeof(MyLangStrings);
 
            var dict = Enum.GetValues(typeof(TEnum))
               .Cast<TEnum>()
               .ToDictionary(t => (int)Enum.Parse(typeof(TEnum), t.ToString()), t =>
               {
                   var p = lang.GetProperty(t.ToString());
                   return p.GetValue(p.DeclaringType, null).ToString();
               });
            return dict;
        }