从 var 类型强制转换为其他类
本文关键字:其他 转换 var 类型 | 更新日期: 2023-09-27 18:36:30
将var类型对象强制转换为类的数组。
在我的示例中,我可以从表中查询所有元素。 但问题是当我强制转换它时,它只是没有转换所有实例。有什么帮助吗??
没有"var type"这样的类型。使用 var
的声明只会使编译器推断变量的类型。它仍然是静态类型的,并且就像你显式声明它一样工作 - 尽管它允许你声明使用匿名类型的变量。
在您的情况下,我们不知道所涉及的任何方法的作用,这意味着我们无法真正判断发生了什么。听起来Query
可能是IEnumerable<AccessPointItem>
型.您需要在代码中表达如何从AccessPointItem
转换为AccessPoint
。
需要注意的几点:
- 您的查询表达式有些毫无意义 - 您可能只想调用
tsvc.CreateQuery<AccessPointItem>()
- 通常,C# 中的局部变量使用驼峰大小写(以小写字母开头)而不是 Pascal 大小写
- 您无用地创建一个数组 - 为什么?
-
Select()
永远不会返回 null,因此您无需检查它 - 调用
Cast
将尝试将每个AccessPointItem
投射到AccessPoint
......这真的是你的意图吗?
看起来你把你的类混AccessPoint
和AccessPointItem
。试试这个:
public static AccessPoint[] getAllAps()
{
return tsvc.CreateQuery<AccessPoint>("AccessPointTable").ToArray();
}
或者这个:
public static AccessPointItem[] getAllAps()
{
return tsvc.CreateQuery<AccessPointItem>("AccessPointTable").ToArray();
}
所涉及的类型有问题。
首先你读AccessPointItem
:
var Query = from APs in tsvc.CreateQuery<AccessPointItem>(...)
然后你尝试将其转换为AccessPoint
:
return Query.Cast<AccessPoint>()
您需要实现某种转换方法才能使其工作(不幸的是,我自己从未这样做过,但是从快速的Google运行中,我看到有关该主题的大量信息可用)。我会在头顶上试一试:
//inside AccessPointItem.cs
public static AccessPoint ToAccessPoint(this AccessPointItem item) // extension method looks good for the job
{
AccessPoint retObj = new AccessPoint();
// assign properties from 'item' to 'retObj'
return retObj;
}
//Usage example in your case
return Query.Select(singleAccessPointItem => singleAccessPointItem.ToAccessPoint());