小编Lya*_*all的帖子

如何并行运行LINQ'let'语句?

我有这样的代码:

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应该等待它们.

有没有办法实现这个目标?

c# let plinq

13
推荐指数
1
解决办法
298
查看次数

从Excel粘贴到C#app,保持完全精确

我在Excel电子表格中有数据,其值如下:

  • 0.69491375
  • 0.31220394

单元格格式为百分比,并设置为显示两个小数位.因此它们在Excel中显示为:

  • 69.49%
  • 31.22%

我有一个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.Dif
  • DataFormats.Rtf
  • DataFormats.UnicodeText
  • 等等

作为测试,我安装了LibreOffice Calc并将相同的单元格从Excel复制/粘贴到Calc中.Calc保留原始数据的完整精度.

很明显,Excel会将此数据放在其他程序可以访问的位置.如何从我的C#应用​​程序访问它?

编辑 - 后续步骤.

我已经下载了LibreOffice Calc源代码,并且会有一个问题,看看我是否能够从Excel中获取复制数据的完整上下文.

我还GetFormats()调用了从剪贴板返回的数据对象,并获得了24种不同数据格式的列表,其中一些不在DataFormats枚举中.这些措施包括格式,如Biff12,Biff8,Biff5,Format129其他格式不熟悉我之间,所以我会调查这些和回应,如果我做任何的发现...

c# excel paste

7
推荐指数
1
解决办法
8001
查看次数

标签 统计

c# ×2

excel ×1

let ×1

paste ×1

plinq ×1