我正在尝试将字节列表转换为整数列表。
我的字节列表仅包含一个值 11。
tmpMarketRights = AllMarketRights.Cast<int>().ToList();
Run Code Online (Sandbox Code Playgroud)
11 应该能够转换为 INT 有谁知道为什么此转换无效,以及将字节列表转换为 int 列表的最短方法?
此异常的原因?
首先,让我们尝试一下:
byte myByte = 11;
object myObject = myByte;
int x = (int)myObject; // Exception will be thrown here
Run Code Online (Sandbox Code Playgroud)
如您所见,InvalidCastException将被抛出。因为,装箱的值只能被拆箱为完全相同类型的变量。
现在,让我们看看正在Cast()做什么。您可以在此处查看此方法的实现。正如你所看到的,它会返回CastIterator。这是以下的实现CastIterator:
static IEnumerable<TResult> CastIterator<TResult>(IEnumerable source)
{
foreach (object obj in source) yield return (TResult)obj;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它不会投射byte到int,而是object投射到int。原因是,Cast是 的扩展方法IEnumerable,而不是IEnumerable<T>.
public static IEnumerable<TResult> Cast<TResult>(
this IEnumerable source
)
Run Code Online (Sandbox Code Playgroud)
因此,请使用以下方法之一:
var tmpMarketRights = AllMarketRights.Select(x => Convert.ToInt32(x)).ToList();
var tmpMarketRights = AllMarketRights.Select(x => (int)x).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |