2011-05-31 75 views
3

在C#中,我有一个可以传递List参数的公共函数,其中T是一个自定义类。该功能可以通过不同的T类。在每种情况下如何验证T的类型的问题?验证函数中的自定义类的类型

public static List<T> ConvertData(List<T> oldDatas) 
{ 
    //I will analyze the object T, 
    //but now i don't know how to verify the type of T, 
    //with T can change, 
    //example maybe T is T1 class,or T2 class.. 
} 

感谢我的愚蠢问题。

+4

哪种语言? 'C#','Java'?用正在使用的正确编程语言标记问题。 – Naveen 2011-05-31 09:41:32

+1

c#或Java?...... – 2011-05-31 09:42:58

回答

1

可以使用typeof(T)关键字或使用一些检查(如果你期待某些类型的通过参数传递):

public static List<T> ConvertData(List<T> oldDatas) 
{ 
    foreach (var itemList in oldDatas) 
    { 
     if (itemList is LinqType) 
     { 
      var linqTypeItem = (LinqType) itemList; 
      Console.WriteLine(linqTypeItem.PROPERTY_YOU_NEED); 
     } 
     // or 
     var linqTypeItem = itemList as LinqType; 
     if (linqTypeItem != null) 
     { 
      Console.WriteLine(linqTypeItem.PROPERTY_YOU_NEED); 
     } 
    } 
} 

也可以使用Cast()方法。更多信息here

+0

在这里,T是Linq的一个对象。所以我怎样才能得到物体的属性。 – phamminh05 2011-06-01 00:22:52

+0

更新了答案 – VMAtm 2011-06-01 06:57:46

2

你需要使不同的转换取决于或只是想检查特定的类吗?在第二种情况下,你可以尝试对于T类似指定权类型:编译期间

public static List<string> ConvertData(List<string> data) 
{ 
    return PrivateConvertData<string>(data); 
} 

public static List<int> ConvertData(List<int> data) 
{ 
    return PrivateConvertData<int>(data); 
} 

private static List<T> PrivateConvertData<T>(List<T> data) 
{ 
    // code here 
} 

该代码将检查的T型。

+0

因为T是Linq类的sql,所以它在每个T对象中都有一些属性。我如何获得propeties? – phamminh05 2011-06-01 03:18:57

+0

您是否需要来自不同课程的相同属性或您的属性列表取决于您的课程? – chopikadze 2011-06-01 09:19:51

2

只是做:

public static class Test<T> 
    where T : class, new() 
{ 
    public static List<T> ConvertData(List<T> oldDatas) 
    { 
     T instanceOfT = new T(); 
     Type typeOfT = typeof(T); // or instanceOfT.GetType(); 

     if(instanceOfT is string) 
     { 
      // T is a string 
     } 
     else if(instanceOfT is int) 
     { 
      // T is an int 
     } 
     // ... 
    } 
} 

但是,这不是生产力,打破了通用的概念......说明你正在试图做什么。