如何使用Type属性调用泛型方法?

时间:2014-10-24 21:59:09

标签: c# .net generics

我有以下情况:

public class ListingAttribute : AgencyServicesApi.Attribute
{
    public Type ClrType { get; set; }
    //public void SetValue(object value)
    //{
    //    this.SetValueGen<ClrType>((ClrType)value);
    //}

    public void SetValueGen<TValue>(TValue value)
    {
        var t = typeof(TValue);
        Value = // Use conversion methods based on ClrType here.
    }
}

我无法使ListingAttribute泛型并为T使用通用参数ClrType,因为我必须在运行时设置类型。无论AgencyServicesApi.Attribute的内容是否应为任何其他类型,Value都有string类型的Value属性。我正在尝试扩展AgencyServicesApi.Attribute,并根据配置文件正确设置ClrType,并能够添加正确的验证和ToString实施。

如何调用泛型方法SetValueGen并将ClrType类型作为类型参数传递给它? SetValue被注释掉了,因为它没有编译,我不指望它,但我坚持这个问题。

1 个答案:

答案 0 :(得分:0)

几乎按原样使用您的代码:

public class ListingAttribute : AgencyServicesApi.Attribute
{
    public Type ClrType { get; set; }

    public void SetValue(object value)
    {
        SetValueGen((dynamic)value);
    }

    public void SetValueGen<TValue>(TValue value)
    {
        var t = typeof(TValue);
        Value = // Use conversion methods based on ClrType here.
    }
}

但这似乎不对......你为什么不这样做:

public void SetValue(object value)
{
    var t = value.GetType();
    Value = // Use conversion methods based on t here.
}