如何将自定义类型传递给Generic T类型C#

时间:2016-07-01 10:30:36

标签: c# casting propertyinfo custom-type generic-type-argument

我有一个需要T参数的方法

private Dictionary<string, string> GetCustomAttributes(T model, System.Reflection.PropertyInfo property)

我在不同的地方使用它 - 有时我将T模型作为第一个参数传递,但我也想将已知的自定义类型传递给方法,例如。

public Dictionary<string, string> DoTheJob(T model)
    {
        var errors = new Dictionary<string, string>();
        foreach (System.Reflection.PropertyInfo property in typeof(T).GetProperties())
            {
                if (typeof(ClassB).IsAssignableFrom(property.PropertyType))
                {
                    foreach (System.Reflection.PropertyInfo subProperty in property.GetType().GetProperties())
                    {
                        var propertyModel = property.GetValue(model);
                        //T newModel = (T)Convert.ChangeType(propertyModel, typeof(T));
                        foreach (var newError in GetCustomAttributes(propertyModel, subProperty))
                        {
                            errors.Add(newError.Key, newError.Value);
                        }
                    }
                }

                foreach (var newError in GetCustomAttributes(model, property))
                {
                    errors.Add(newError.Key, newError.Value);
                }
            }

        return errors;
    }

传递给DoTheJob方法的T模型是ClassA类型。然后该方法读取其属性,检查其属性,并检查ClassB属性的属性。

public class ClassA
{
    public ClassB Approved { get; set; }
}

问题是GetCutomAttributes方法确实期望T类型作为参数,并且呼叫ClassB不是预期的。

我尝试将ClassB转换为T泛型,但它不是IConvertible,所以无法实现它。

如何将ClassB作为T传递给GetCustomAttributes方法?

0 个答案:

没有答案