2015-05-15 212 views
0

我如何轉換匿名T型強類型的類轉換匿名T型強類型

我有這個類有兩個參數,匿名類型T的方法,將來應該採取任何類型的參數。

我試過使用var rest = pointOfSalesList.ChangeType(model, typeof(List<PointOfSaleModel>));沒有錯誤,但變量pointOfSalesList未轉換爲強類型List<PointOfSaleModel>

internal override void Load<T>(T data, List<T> model) 
{ 
    // this does't work 
    var pointOfSalesList = Convert.ChangeType(model, typeof(List<PointOfSaleModel>)); 
} 

我想將List<T> model參數轉換爲強類型的類

internal class PointOfSaleModel : IPointOfSaleModel 
    { 
     public Guid PointOfSaleProviderUniqueId { get; set; } 

     public string CorporateId { get; set; } 

     public string Name { get; set; } 

     public string Adress { get; set; } 

     public int? ZipCode { get; set; } 

     public string Phone { get; set; } 

     public string ContactPerson { get; set; } 

     public string Email { get; set; } 

     public bool Status { get; set; } 
    } 

我一直在努力了一天來解決這個問題。

+3

爲什麼你想改變的類型?這看起來不是一個合適的解決方案;也許你應該將T改爲'IPointOfSaleModel'並刪除類型參數? –

+6

'T'不是_anonymous_,它是_generic_,意味着它可以是任何類型(因爲沒有明確的限制)如果'T'是'int'會怎麼樣?你會如何「轉換」到「PointOfSaleModel」? –

+0

你在'Load()'中的轉換中要做什麼? –

回答

0

爲什麼不是這樣的?

internal override void Load<T>(T data, List<T> model) 
{ 

    if (data.GetType() == typeof(PointOfSaleModel)) 
     { 
      var pointOfSalesList = model as List<PointOfSaleModel>; 
     }    
} 
+0

在執行PointOfSaleModel轉換之前安全地檢查類型 – tier1

+2

只有當T是_exactly_'PointOfSaleModel'(而不是子類)時,這纔會起作用。在這種情況下,它不應該是通用的。 –

+0

D Stanley。那麼更好的方法是使用強類型作爲參數呢? – eFlag

0

這個代碼表示沒有任何技巧,但執行泛型鑄造(注意其中T:PointOfSaleModel)

class Caster 
{ 
    internal void Load<T>(List<T> model) 
     where T:PointOfSaleModel 
    { 

     // this should work 
     var pointOfSalesList = new List<PointOfSaleModel>(model); 
    } 

} 

class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     var list = new List<PointOfSaleModel> { 
      new PointOfSaleModel{ 
       Name = "name 1" 
      } 
     }; 
     var caster = new Caster(); 
     caster.Load (list); 
    } 
}