小编Pau*_*rth的帖子

C#相当于std :: sort和std :: unique

我有一个C#中的整数列表.我希望删除重复项.在C++中,我将通过std :: sort和std :: unique算法运行它,以获得唯一列表的高效方法.

在C#中做同样事情的最佳方法是什么?换句话说,我正在寻找一种更优雅的方式来执行以下代码:

    private static int[] unique(int[] ids)
    {
        IDictionary<int, object> d = new Dictionary<int, object>();
        foreach(int i in ids)
            d[i] = null;

        int[] results = new int[d.Count];
        int j = 0;
        foreach(int id in d.Keys)
            results[j++] = id;

        return results;
    }
Run Code Online (Sandbox Code Playgroud)

.net c# sorting unique

4
推荐指数
1
解决办法
3662
查看次数

根据YYYYMMDD等格式化.NET DateTime的最简单方法是什么?

我有一个DateTime类,并希望按照某种格式显示它...在这种情况下,我特别希望将其格式化为YYYYMMDD格式.

这样做的最佳C#/ .NET API功能是什么?

.net c# formatting datetime

3
推荐指数
2
解决办法
4193
查看次数

使用SqlDataReader作为资源的习惯用法

这个问题之后,我发现自己一遍又一遍地编写以下代码:

SqlCommand command = new SqlCommand();
// Code to initialize command with what we want to do
using (SqlConnection connection = openConnection())
{
    command.Connection = connection;
    using (SqlDataReader dataReader = thisCommand.ExecuteReader())
    {
        while (dataReader.Read())
        {
            // Do stuff with results
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

必须嵌套两个using语句是相当繁琐的.有没有办法告诉 SqlDataReader它拥有该命令,并告诉命令它拥有该连接?

如果有办法做到这一点,那么我可以编写一个可以这样调用的辅助方法:

// buildAndExecuteCommand opens the connection, initializes the command
// with the connection and returns the SqlDataReader object. Dispose of the
// SqlDataReader to dispose of all resources that were acquired
using(SqlDataReader …
Run Code Online (Sandbox Code Playgroud)

.net c# sql sql-server

3
推荐指数
1
解决办法
1171
查看次数

在类型推断中需要"统一"的最简单的例子

我试图了解如何实现类型推断.特别是,我不太清楚"统一"的繁重发挥在何处/为何发挥作用.

我将举一个"伪C#"的例子来帮助澄清:

天真的方式是这样的:

假设您将程序"解析"到表达式树中,以便可以使用以下命令执行:

interface IEnvironment
{
    object lookup(string name);
}

interface IExpression
{
    // Evaluate this program in this environment
    object Evaluate(IEnvironment e);
}
Run Code Online (Sandbox Code Playgroud)

因此,"乘法"之类的东西可以用以下方式实现:

class Multiply : IExpression
{
    IExpression lhs;
    IExpression rhs;
    // etc.
    public object Evaluate(IEnvironment e)
    {
        // assume for the moment C# has polymorphic multiplication
        return lhs.Evaluate(e) * rhs.Evaluate(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后要"实现"类型推断,你可以做类似的事情:

interface ITypeEnvironment
{
    Type getType(string name);
}

interface IExpression
{
    //as before
    object Evaluate(IEnvironment e);
    // infer type
    Type inferType(ITypeEnvironment typeEnvironment);
} …
Run Code Online (Sandbox Code Playgroud)

c# scheme type-inference unification

3
推荐指数
1
解决办法
1631
查看次数

什么是Assertion.AssertEquals的"升级路径"?

我继承了一些单元测试代码,它给了我一个弃用警告,因为它使用了"Assertion.AssertEquals":

警告CS0618:'NUnit.Framework.Assertion'已过时:'使用Assert类代替'

但是,我不能在Assert类中看到我应该使用的明显方法吗?

AssertEquals接收两个对象和一条消息,如果出现故障,可以使用该消息报告错误.例如

        Assertion.AssertEquals(
             "Enqueuing first item should set count to 1",
             1, pq.Count);
Run Code Online (Sandbox Code Playgroud)

Assert类中的等价方法是什么?

.net nunit assertions

3
推荐指数
2
解决办法
1613
查看次数

如何在 Java Swing 中实现空闲任务

我有一个越来越慢的 GUI 应用程序。我想开始为各种 GUI 任务引入计时——但是,我们的许多 GUI 操作会触发其他操作,然后“稍后调用”以触发其他操作。

最终,一切都安定下来,没有什么可做的了。此时,我想停止计时器并报告 GUI“动作”花费了多长时间。

我认为这样做的方法是实现一个名为invokeOnceIdle(Runnable task). 只有当 AWTEventQueue 为“空”时,该方法才会执行提供的任务。即提供的“任务”应该是队列中的最后一件事。

这样做的一种方法是,是否有一种方法可以指定“最低”优先级SwingUtilities.invokeLater- 但这是不可能的。

我接下来查看是否可以“invokeLater”一个 Runnable 来检查事件队列是否为“空”——但是没有公共方法可以查看事件队列是否真的为空。

做到这一点的最佳方法是什么?

java swing awt event-dispatch-thread awt-eventqueue

3
推荐指数
1
解决办法
2924
查看次数

如何删除System.Threading.Thread.CurrentThread.CurrentCulture上的DateTime.Parse依赖项

请考虑以下代码:

class Program
{
    static void Main(string[] args)
    {
        try
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fo-FO");
            var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
            var d = DateTime.Parse(s, CultureInfo.InvariantCulture);
            Console.WriteLine("Was able to parse with fo-FO");
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception: {0}", e);
        }

        try
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
            var d = DateTime.Parse(s, CultureInfo.InvariantCulture);
            Console.WriteLine("Was able to parse with en-US");
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception: {0}", e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Exception: System.FormatException: String was not recognized as a …
Run Code Online (Sandbox Code Playgroud)

.net c# datetime

2
推荐指数
1
解决办法
2065
查看次数

DDE:实现通过Shell和ddeexec正确启动的应用程序

我正在尝试实现一个应用程序,它将自己注册为DDE服务器,以便它正确响应我们的自定义".qsx"文件类型,就像WinWord响应".docx"文件类型一样.

  1. 如果应用程序已在运行并且有人双击".qsx"文件,那么我们希望已打开的应用程序接收DDE打开命令并打开相关文件.
  2. 但是,如果应用程序尚未运行,则shell应启动我们的应用程序,然后与应用程序建立DDE连接并告诉它像以前一样打开该文件.

我们有第1部分完美无缺地工作.

但是,对于第2部分,Shell启动命令,但随后失败并显示"将命令发送到程序时出现问题".这对应于从"ShellExecute"Windows API函数返回的返回码"SE_ERR_DDEFAIL"(29).

实际上,我编写了一个名为"ShellExecute.exe"的自定义控制台应用程序,它可以完全独立于explorer.exe重现此问题.

如果我运行ShellExecute.exe并且我们的"DDE服务器"应用程序已启动,则它可以正常运行.如果我为".docx"文档运行ShellExecute.exe并且WinWord未运行,则WinWord正确启动并加载文档如果我为".qsx"文档运行ShellExecute.exe并且我们的应用程序未运行,ShellExecuteEx将启动该应用程序但在我们的服务器应用程序甚至有机会注册为DDE服务器之前,立即返回SE_ERR_DDEFAIL.

出于某种原因,似乎对于WinWord,ShellExecute等待它启动.

我已经尝试运行procmon.exe运行这两个案例,看看ShellExecute可能在注册表中寻找的区分我们的案例和WinWord.exe,但我找不到任何东西.

我真正需要的是ShellExecute算法的源代码,这样我就可以找出它为WinWord工作的原因,而不是我们的自定义扩展.

任何人都可以详细解释ShellExecute在启动应用程序时所做的工作,特别是它知道如何"等待"应用程序注册为DDE服务器?

windows winapi dde

2
推荐指数
1
解决办法
4772
查看次数

如何在.NET中引发事件查看器"事件"?

我想提出一个"事件",它出现在.NET的系统事件查看器(eventvwr.exe)中.

不幸的是,谷歌只是给了我很多关于"事件"的东西,这些事件不是我想提出的事件.

什么是正确的API调用?

更新 感谢您的答案到目前为止.有趣的是,我发现即使我没有创建源,对"LogEvent"的调用也可以使用新的源代码.即

// The following works even though I haven't created "SomeNewSource"
EventLog.WriteEntry("SomeNewSource", message);
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会这样?

.net c#

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

Haskell Noob问题:我的追加函数出了什么问题?

我正在尝试编写一个Haskell追加函数......这就是我所拥有的:

myappend :: [a] -> [a] -> [a]
myappend [] x = x
myappend [x:xs] y = x : myappend xs y
Run Code Online (Sandbox Code Playgroud)

但是它给了我一个错误:发生检查:无法构造无限类型:a = [a]当推广`myappend'的类型时

所以,显然它有问题但是我看不到它...我的追加功能有什么问题?

haskell functional-programming append

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