我有这样的代码:
var list = new List<int> {1, 2, 3, 4, 5};
var result = from x in list.AsParallel()
let a = LongRunningCalc1(x)
let b = LongRunningCalc2(x)
select new {a, b};
Run Code Online (Sandbox Code Playgroud)
让我们说LongRunningCalc每种方法需要1秒钟.上面的代码大约需要2秒才能运行,因为虽然5个元素的列表是并行操作的,但是从let语句中调用的两个方法是按顺序调用的.
但是,这些方法也可以安全地并行调用.他们显然需要合并回来,select但直到那时应该并行运行 - select应该等待它们.
有没有办法实现这个目标?
我在Excel电子表格中有数据,其值如下:
单元格格式为百分比,并设置为显示两个小数位.因此它们在Excel中显示为:
我有一个C#程序解析了这些数据Clipboard.
var dataObj = Clipboard.GetDataObject();
var format = DataFormats.CommaSeparatedValue;
if (dataObj != null && dataObj.GetDataPresent(format))
{
var csvData = dataObj.GetData(format);
// do something
}
Run Code Online (Sandbox Code Playgroud)
问题是csvData包含Excel的显示值,即'69 .49%'和'31 .22%'.它不包含额外小数位的完整精度.
我尝试过使用各种不同的DataFormats值,但数据只包含Excel的显示值,例如:
DataFormats.DifDataFormats.RtfDataFormats.UnicodeText作为测试,我安装了LibreOffice Calc并将相同的单元格从Excel复制/粘贴到Calc中.Calc保留原始数据的完整精度.
很明显,Excel会将此数据放在其他程序可以访问的位置.如何从我的C#应用程序访问它?
编辑 - 后续步骤.
我已经下载了LibreOffice Calc源代码,并且会有一个问题,看看我是否能够从Excel中获取复制数据的完整上下文.
我还GetFormats()调用了从剪贴板返回的数据对象,并获得了24种不同数据格式的列表,其中一些不在DataFormats枚举中.这些措施包括格式,如Biff12,Biff8,Biff5,Format129其他格式不熟悉我之间,所以我会调查这些和回应,如果我做任何的发现...