指定将无效字节强制转换为 int

0 c# linq int byte casting

我正在尝试将字节列表转换为整数列表。

我的字节列表仅包含一个值 11。

tmpMarketRights = AllMarketRights.Cast<int>().ToList();
Run Code Online (Sandbox Code Playgroud)

11 应该能够转换为 INT 有谁知道为什么此转换无效,以及将字节列表转换为 int 列表的最短方法?

Far*_*yev 5

此异常的原因?

首先,让我们尝试一下:

 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)

如您所见,它不会投射byteint,而是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)