zoukankan      html  css  js  c++  java
  • Extension Method的两个小例子(Dictionary_FindKeyByValue && T_Clone)

    直接上代码了,以后碰到类似的就直接用了

    public static TKey FindKeyByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TValue value)
    {
    if (dictionary == null)
    throw new ArgumentNullException("dictionary");

    foreach (KeyValuePair<TKey, TValue> pair in dictionary)
    if (value.Equals(pair.Value)) return pair.Key;

    throw new Exception("the value is not found in the dictionary");
    }

      public static T Clone<T>(this T source)
    {
    T Cloned = (T)Activator.CreateInstance(source.GetType());

    (from Property in source.GetType().GetProperties()

    where Property.GetGetMethod() != null && Property.GetSetMethod() != null
    select Property).ToList().ForEach(Property =>
    {
    // Check if the object inherits from ICollection (The ICollection interface is the base interface for classes in the System.Collections namespace
    if (!Property.PropertyType.GetInterfaces().Contains(typeof(ICollection)))
    {
    object PropertyValue = Property.GetGetMethod().Invoke(source, Property.GetGetMethod().GetParameters());

    if (PropertyValue != null && PropertyValue is DependencyObject) { PropertyValue = PropertyValue.Clone(); }

    // if PropertyValue is not a value type and is itself a dependency object, it must be "cloned" as well
    Property.GetSetMethod().Invoke(Cloned, new object[] { PropertyValue });
    }
    else if (Property.PropertyType.GetInterfaces().Contains(typeof(ICollection)))
    {
    ICollection CollectionValue = (ICollection)Property.GetGetMethod().Invoke(source, new object[] { }); Property.SetValue(Cloned, CollectionValue, null);
    }

    });
    return Cloned;
    }



  • 相关阅读:
    ubuntu14.4开启ftp服务
    ubuntu14.4安装gtx970显卡驱动的艰辛历程
    jquery.dataTables的用法
    win7上安装theano keras深度学习框架
    使用BeanUtils设置属性转换String到Date类型
    keras在win7下环境搭建
    Python-try except else finally有return时执行顺序探究
    MySQL-EXPLAIN用法详解
    PHP-Windows下搭建Nginx+PHP环境
    PHP-php.ini中文版
  • 原文地址:https://www.cnblogs.com/leon032/p/2295459.html
Copyright © 2011-2022 走看看