Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将泛型类型列表强制转换为特定类型列表_C#_List_Generics_Casting - Fatal编程技术网

C# 将泛型类型列表强制转换为特定类型列表

C# 将泛型类型列表强制转换为特定类型列表,c#,list,generics,casting,C#,List,Generics,Casting,我有一个返回列表的通用方法“GetSomeData”。我可以是int,double,uint的列表 public void GenericMethod<T>() { List<T> genericList = GetSomeData<T>(); List<double> castedList1 = (List<double>) genericList; List<double> castedList2 =

我有一个返回列表的通用方法“GetSomeData”。我可以是int,double,uint的列表

public void GenericMethod<T>()
{
   List<T> genericList = GetSomeData<T>();
   List<double> castedList1 = (List<double>) genericList;
   List<double> castedList2 = genericList.Cast<double>();  //Not working
   List<double> castedList3 = genericList.Select(f => (double)f).ToList(); //not working
}
public void GenericMethod()
{
List genericList=GetSomeData();
List castedList1=(List)genericList;
List castedList2=genericList.Cast();//不工作
List castedList3=genericList.Select(f=>(double)f).ToList();//不工作
}
T可以是int,uint,double

有没有办法播放此列表?

试试以下方法:

List<double> castedList3 = genericList.OfType<double>().ToList();
List castedList3=genericList.OfType().ToList();

这可以正常工作,但如果
T
不能转换为
double

public void GenericMethod<T>() where T : struct
{
   List<T> genericList = GetSomeData<T>();

   IList<double> doubleList = genericList.Select(val => Convert.ToDouble(val))
                                         .ToList();
}
public void GenericMethod(),其中T:struct
{
List genericList=GetSomeData();
IList doubleList=genericList.Select(val=>Convert.ToDouble(val))
.ToList();
}

如果调用GenericMethod(),我将得到一个列表。您希望如何将其转换到列表中?如何确保
T
int
uint
double
?确定。我理解。但是,那么,你的解决办法是什么呢?我有一个列表,必须转换为列表:(如下面的答案所示,尝试使用
Convert.ToDouble
,但这并不是强制转换列表,而是创建一个给定元素的新的单独列表。)type@MarcGravell忽略原始文件中无法转换的所有项目。这种方法的含义是什么?为什么我们不能只使用
List genericslist=GetSomeData();
?@HamletHakobyan这是OP的问题。我不知道
GetSomeData
的实现,也不知道
T
类型参数的含义。OP想将
List
打开类型转换为
List
,我给了他一个这样做的例子。@Hamlet,GetSomeData是一个用da填充列表的方法数据表中的ta,可以是int、uint、byte、decimal…所有数字类型。我不想在代码中输入太深的内容,而是想集中精力解决问题。事实上,这是运行时使用GetType()定义的类型遇到大麻烦的最后一步。为了避免条件和“switch”,我使用“MethodInfo.Invoke”将其传递给GenericMethod。