小编Jua*_*uan的帖子

为什么不能通过严格的评估来欺骗Haskell执行IO操作?

我只是在学习Haskell和IO monads.我想知道为什么这不会强制程序输出"hi"以及"bye":

second a b = b
main = print ((second $! ((print "hi") >>= (\r -> return ()))) "bye")
Run Code Online (Sandbox Code Playgroud)

据我所知,$!运算符会强制要求第一个参数second进行求值,并且>>=运算符需要运行print "hi"以便从中获取值并将其传递\r -> return ()给屏幕,这将打印"hi"到屏幕.

我的推理有什么问题?

而且,有没有办法证明Haskell不能被欺骗(除了使用不安全的函数)在"安全"代码中运行IO操作?

monads haskell io-monad

16
推荐指数
2
解决办法
1664
查看次数

我是否需要为每个儿童控制调用SuspendLayout?

找不到任何相关信息.我的控件渲染速度非常慢,我注意到SuspendLayout在进行重大更新时我没有打电话.

我有点怀疑,因为顶级控件包含包含其他控件的控件等等,调用SuspendLayout我的顶级控件也会挂起每个嵌套控件的布局,还是我需要为每个控件调用它?

c# winforms

14
推荐指数
1
解决办法
8118
查看次数

如何创建一个可以删除其他控件的UserControl?

在WinForms中,如何UserControl在我放置表单时创建一个,然后通过从工具箱中拖动它们来添加其他控件,就像所有容器控件(面板,组框等)一样?我试图通过将控制放在我的控制中来添加控件但是当我移动控件时我添加的控件保持在它们所在的位置,如果不是我的控制我会使用a Panel(其他控件会移动)与小组).

.net c# user-controls windows-forms-designer winforms

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

如何使用C#安全地将数据保存到现有文件?

如何安全地将数据保存到C#中已存在的文件中?我有一些序列化到文件的数据,我很确定直接保存到文件不是一个好主意,因为如果出现任何问题,文件将被破坏,以前的版本将丢失.

所以这就是我到目前为止所做的事情:

string tempFile = Path.GetTempFileName();

using (Stream tempFileStream = File.Open(tempFile, FileMode.Truncate))
{
    SafeXmlSerializer xmlFormatter = new SafeXmlSerializer(typeof(Project));
    xmlFormatter.Serialize(tempFileStream, Project);
}

if (File.Exists(fileName)) File.Delete(fileName);
File.Move(tempFile, fileName);
if (File.Exists(tempFile)) File.Delete(tempFile);
Run Code Online (Sandbox Code Playgroud)

问题是,当我试图保存到Dropbox中的文件时,有时我得到一个异常,告诉我它无法保存到已经存在的文件中.显然第一个File.Delete(fileName);没有立即删除文件,但稍后.所以我得到了一个例外,File.Move(tempFile, fileName);因为该文件存在,然后文件被删除,我的文件丢失了.

我已经在我的Dropbox中使用了其他应用程序和文件,不知怎的,他们设法不搞乱它.当我试图保存到我的Dropbox文件夹中的文件时,有时我会收到一条消息,告诉我该文件正在被使用或类似的东西,但我从来没有遇到过被删除文件的问题.

那么这里的标准/最佳做法是什么?

好的,这是我在阅读完所有答案后想出来的:

private string GetTempFileName(string dir)
{
    string name = null;
    int attempts = 0;
    do
    {
        name = "temp_" + Player.Math.RandomDigits(10) + ".hsp";
        attempts++;
        if (attempts > 10) throw new Exception("Could not create temporary file.");
    }
    while (File.Exists(Path.Combine(dir, name)));

    return name; …
Run Code Online (Sandbox Code Playgroud)

c# io

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

.NET中的多线程和闭包

如果我有这个:

public string DoSomething(string arg)
{
    string someVar = arg;
    DoStuffThatMightTakeAWhile();
    return SomeControl.Invoke(new Func<string>(() => someVar));
}
Run Code Online (Sandbox Code Playgroud)

这种方法可以从多个线程同时调用,一个线程是停留在DoStuffThatMightTakeAWhile,然后第二个线程调用DoSomething具有不同的arg,将这个改变的值someVar所有线程,因此,DoSomething返回的第二个版本someArg在两个通话,或someVar每个线程都会存在一个?

编辑我认为我的编辑Action应该是Func这样的.

.net c# multithreading closures

12
推荐指数
2
解决办法
1801
查看次数

从点获取DOM文本节点?

就像我可以从一个点获取一个元素document.elementFromPoint或者document.getElementFromPoint,如果该点位于文本节点,是否有可能以某种方式获取文本节点?我想如果至少我可以获得文本节点的位置和大小,那么我可以找出它们中包含哪个点.但是DOM节点没有位置属性.是否可以这样做?

javascript dom

12
推荐指数
1
解决办法
2198
查看次数

如何"手动"返回WebBrowser?

我正在研究一个有时需要记住特定页面的Web抓取工具,然后转到其他页面,然后返回到该页面.目前我只保存页面的网址,但这对于Google地图这样的网页不起作用,其中网址始终相同.

我可以看到该GoBack方法确实返回到上一页,所以不知何故WebBrowser记得以前的页面是什么.我该如何手动完成此操作?我可以计算自从我想要返回的页面以来已经访问了多少页面,然后GoBack根据需要多次调用,但这是非常不可靠和不优雅的.所以我想知道如何实现一个GoBackToAParticularPage方法.

我认为有一件事可以让我更接近解决方案:保存所有帧的URL,然后在返回该页面时将它们放回原处.我认为这将解决谷歌地图问题.我还没有测试过.我不确切知道这样做的正确方法是什么.在设置URL之前,我需要等待帧存在.

c# browser winforms

11
推荐指数
2
解决办法
5819
查看次数

为什么XmlSerializer可以序列化抽象类而不是接口?

编辑此代码应说明整个问题:

[XmlInclude(typeof(AThing1))]
public abstract class AThing
{
    public abstract string Name { get; set; }
}

[XmlInclude(typeof(IThing1))]
public interface IThing
{
    string Name { get; set; }
}

public class AThing1 : AThing
{
    public override string Name { get; set; }
}

public class IThing1 : IThing
{
    public string Name { get; set; }
}

List<AThing> aThings = new List<AThing>(new AThing[] { new AThing1() { Name = "Bob" } });
List<IThing> iThings = new List<IThing>(new IThing[] { …
Run Code Online (Sandbox Code Playgroud)

.net c# xmlserializer

11
推荐指数
1
解决办法
8584
查看次数

替换lambda表达式中的参数

考虑这段代码:

public class Foo
{
    public int a { get; set; }
    public int b { get; set; }
}

private void Test()
{
    List<Foo> foos = new List<Foo>();
    foos.Add(new Foo());
    foos.Add(new Foo());
    Expression<Func<Foo, int>> exp0 = f => f.a * f.b;
    Expression<Func<int>> exp1 = () => foos[0].a * foos[0].b;
    Expression<Func<int>> exp2 = () => foos[1].a * foos[1].b;
}
Run Code Online (Sandbox Code Playgroud)

你怎么能把exp0它变成两个与exp1和相同的表达式exp2.请注意,我不想仅为exp0每个Fooin 评估foos,而是获得两个新表达式.

[更新]:

基本上,我希望能够扩大或"扁平化"传递给A的表达Linq扩展方法,如Sum入枚举每个项目一个表达,因为这些枚举是静态的,因为我已经有代码读取不表达获取参数(然后将它们转换为另一种语言). …

c# lambda partial-application expression-trees

11
推荐指数
1
解决办法
9976
查看次数

Web浏览器和javascript window.close()

如果我WebBrowser在我的应用程序中托管一个,并且在我的WebBrowser调用上显示的网页中有一个javascript代码window.close(),我在提示符上单击"是",我的WebBrowser消失,但我的表单保持打开状态.

我不想禁用javascript,而不是按"是"显然不是解决方案.处理这个问题的最佳方法是什么?即使用户按下"是",这是否可以以编程方式取消?而且,还有其他任何类似的javascript技巧window.close()可能会搞砸我的应用程序,我应该知道吗?(我的应用程序使用a WebBrowser来搜索网络,因此应该考虑每个可能的javascript代码.)

.net c# browser

10
推荐指数
2
解决办法
7452
查看次数