如何解决验证函数中的自定义类的类型
| 在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..
}
谢谢你的愚蠢问题。
解决方法
这是为C#
Type gt = typeof(T);
检查是否存在java:获取java.util.List的通用类型
, 做就是了 :
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
}
// ...
}
}
但这没有效果,并且打破了通用的概念。请解释您要做什么。
, 您是否需要进行其他转换,还是只想检查特定的类?在第二种情况下,您可以尝试为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的类型。
, 您可以使用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()
方法。更多信息在这里
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。