我有一个函数,它使用with 和combination 来跳过n代码y行并从给定文件中获取行.当我尝试打开下次给出的文件时:File.ReadLinesSkipTakefilePath
string[] Lines = File.ReadLines(filePath).Skip(0).Take(0).ToArray();
using (StreamWriter streamWriter = new StreamWriter(filePath))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我File in use by another process在" using"行上有一个例外.
它看起来像是IEnumerable.Take(0)罪魁祸首,因为它返回一个空IEnumerable而不枚举返回的对象File.ReadLines(),我相信它不会处理文件.
我对吗?他们不应该列举以避免这种错误吗?怎么做得好?
我有一个基本的CRC32实现遵循维基百科的代码片段:1个样本.我认为我做得对,修改了使用n位寄存器进行余数多项式而不是n + 1位用法.
我得到的结果与在线CRC32实现结果不同.在实施中我需要更改什么?
请忽略逻辑的Console.Writeline语句.
const UInt32 poly = 0x04C11DB7;
public static UInt32 GenerateCRC_32(byte[] message)
{
byte[] augmentedMsg = new byte[message.Length + 4];
message.CopyTo(augmentedMsg, 0);
UInt32 remainder = Convert.ToUInt32(augmentedMsg[0]) << 24 |
Convert.ToUInt32(augmentedMsg[1]) << 16 |
Convert.ToUInt32(augmentedMsg[2]) << 8 |
Convert.ToUInt32(augmentedMsg[3]);
for (Int32 i = 4; i < augmentedMsg.Length; i++)
{
for (int bit = 0; bit < 8; bit++)
{
UInt32 nextBit = ((UInt32)augmentedMsg[i] >> (7 - bit)) & 0x01;
if ((remainder & 0x80000000) > 0)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个C#DLL,其代码派生自一个基类,它是用托管C++编写的.(我对基类代码没有任何控制权)
此基类(在托管C++中)具有成员
int *buffer
Run Code Online (Sandbox Code Playgroud)
预期派生类(在C#中)是memset(用零填充).派生类知道缓冲区的大小.
我使用不安全的上下文,在派生类中访问基类的成员"int*buffer".请告诉我有什么特别的方法可以在c#中的"不安全"上下文中设置缓冲区.
我已经研究过这个与C#中的memset相同的是什么?有关详细信息,但我想知道有什么特别针对"不安全"的背景.
背景:这是一个转换项目,其中派生类本身之前是托管c ++.现在我将派生类DLL单独转换为C#.我也无法控制基类代码!当前代码流如下:只有派生类知道缓冲区的大小.基类通过从派生中获取缓冲区的大小来为该特定大小创建内存,但它不会填充零.派生类Zero首先填充它,然后需要用其内容适当地填充缓冲区.虽然很奇怪,但事实就是如此.
谢谢!