2014-10-24 7 views
-1

У меня следующая ситуация:Как вызвать общий метод с свойством Type?

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 закомментирован, потому что он не компилируется, и я бы этого не ожидал, но я застрял в этом вопросе.

ответ

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. 
} 
+0

Я хочу, чтобы принимать решения, основанные на 'ClrType 'объекта, а не тип значения, переданного в SetValue, как ваш второй пример. Я хочу только принимать типы, которые соответствуют ClrType, но, возможно, мне нужно просто использовать проверки проверки старомодного типа. – ProfK

+0

Я вижу ... Думаю, отражением является ваш лучший выбор: 'if (ClrType.IsInstanceOfType (value))', но мне все еще неясно, что именно вы пытаетесь сделать здесь, поэтому я не могу отредактировать свой ответ в значимым образом, если вы не предоставите более подробную информацию –

Смежные вопросы