我正在研究统一容器,并且有一个关于如何将类的构造解析为接口的多个不同实现的快速问题.
这是我的代码:
public interface IRenderer
{
void DrawSquare(Square square);
void DrawCircle(Circle circle);
}
public interface IShape
{
void Draw(IRenderer renderer);
}
public class Dx11Renderer : IRenderer
{
public void DrawSquare(Square square)
{
}
public void DrawCircle(Circle circle)
{
}
}
public class GlRenderer : IRenderer
{
public void DrawSquare(Square square)
{
}
public void DrawCircle(Circle circle)
{
}
}
public class Circle : IShape
{
public void Draw(IRenderer renderer) { renderer.DrawCircle(this); }
}
public class Square
{
public void Draw(IRenderer …Run Code Online (Sandbox Code Playgroud) 我试图在float和unsigned char数组之间做一些转换(在这种情况下是std :: vector),我遇到了一些麻烦.
我已经将浮点数向量转换为无符号字符,就像这样......
vector<float> myFloats;
myFloats.push_back(1.0f);
myFloats.push_back(2.0f);
myFloats.push_back(3.0f);
const unsigned char* bytes = reinterpret_cast<const unsigned char*>(&floats[0]);
vector<unsigned char> byteVec;
for (int i = 0; i < 3; i++)
byteVec.push_back(bytes[i]);
Run Code Online (Sandbox Code Playgroud)
我希望我已经正确地做到了这一点,如果不是那就是为什么下一部分不会工作的原因.
// converting back somewhere later in the program
unsigned char* bytes = &(byteVec[0]); // point to beginning of memory
float* floatArray = reinterpret_cast<float*>(*bytes);
for (int i = 0; i < 3; i++)
cout << floatArray[i] << endl; // error here
Run Code Online (Sandbox Code Playgroud)
我尝试在最后一部分中使用(字节)而不是(*bytes)但是打印错误的值.这样做也会打印错误的值
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我正在迭代我的工作表
WorkbookPart wbPart = doc.WorkbookPart;
SharedStringTablePart sstPart = wbPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstPart.SharedStringTable;
foreach (var wsp in wbPart.WorksheetParts)
{
Worksheet ws = wsp.Worksheet;
// i want to do something like this
if (ws.Name == "People_Sheet")
{
}
}
Run Code Online (Sandbox Code Playgroud)
我需要知道我正在处理哪张纸,所以我可以用不同的方式处理它.如何获取工作表的名称(当我从excel中打开它时显示)?
如果我得到一张表单,我可以通过属性找到它
doc.WorkbookPart.Workbook.Sheets.ToList().ForEach(x => Console.WriteLine(x.GetAttribute("name", "").Value));
Run Code Online (Sandbox Code Playgroud)
但是工作表和工作表之间的关系是什么?如何从工作表中获取相应的工作表或工作表名称?
更新:
所以我确实找到并尝试了如何使用OpenXML从excel表中检索Tab名称
但是,sheetName与工作表不匹配.
foreach (var wsp in wbPart.WorksheetParts)
{
Worksheet worksheet = wsp.Worksheet;
var sheetName = wbPart.Workbook.Descendants<Sheet>().ElementAt(sheetIndex).Name;
var rows = worksheet.Descendants<Row>();
...
}
Run Code Online (Sandbox Code Playgroud)
从工作表返回的行与sheetName指示的工作表中的行不对应.让我试着进一步解释
我的Excel文档中有三个工作表 - 人员,业务,产品(按此顺序)
在该循环的第一次迭代中 - 我从工作表行获得的数据是指产品表数据,但是sheetName表示"人员"