小编Mik*_*Two的帖子

C#Lambda表达速度

之前我没有使用过很多lambda表达式,我遇到了一个案例,我认为我可以使用一个.我有一个约19,000条记录的自定义列表,我需要查看列表中是否存在记录,因此不是编写一堆循环或使用linq来查看列表,我决定尝试这样做:

for (int i = MinX; i <= MaxX; ++i)
{
    tempY = MinY;

    while (tempY <= MaxY)
    {
        bool exists = myList.Exists(item => item.XCoord == i && item.YCoord == tempY);

        ++tempY;
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是执行需要大约9到11秒.我做错了什么,这只是我不应该使用这样的表达式的情况?

谢谢.

编辑:抱歉.我应该详细说明.我正在创建一个带有for和while循环的记录列表,并检查myList中是否存在该记录.这是我能想到的唯一方法.我会重新评估它,看看我带来了什么.

c# lambda

8
推荐指数
3
解决办法
1955
查看次数

LINQ表达式<Func <T,bool >>等价于.Contains()

有没有人知道如何使用Linq表达式创建.Contains(字符串)函数,甚至创建一个谓词来实现这一点

public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
      Expression<Func<T, bool>> expr2)
{
    var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
    return Expression.Lambda<Func<T, bool>>
               (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
Run Code Online (Sandbox Code Playgroud)

类似的东西是理想的吗?

linq linq-expressions

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

是否有可以跨解决方案文件使用的重构工具?

我见过的所有C#和VB.Net的重构工具都只考虑了单个visual studio解决方案中的源代码.

无论好坏,我们的大型(许多相关程序)系统都分布在许多解决方案文件中,但是:

  • 所有代码都在一个Windows文件夹下.
  • 我们的基于nAnt的构建系统,在windows文件夹中构建所有文件以生成单个dll(比这更复杂但对此问题不重要).
  • 因此,单根文件夹下的所有".cs"和".vb"文件都是系统的一部分.

所以我正在寻找重构和逆向工程工具,它们将单个文件夹作为输入并对该文件夹下的所有文件执行操作.

(该工具可能需要一些帮助来决定什么是"公共"和"内部"的意思,但大部分的时间"内"是指"在同一代码树"时,"代码树"是一个包含代码和所有子文件夹文件夹.)


现在我很贪婪,我希望这些工具可以创建很多已经完成的重构并能够重放重构.然后我可以尝试理想,如果他们工作,扔掉我的代码,获取最新的代码,你做重构,并在其他人更改文件之前检查代码.(同样,当分支需要合并时)

c# vb.net refactoring visual-studio

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

构造大字符串(例如,对于SQL命令)C#编译器有多聪明?

这可能听起来很愚蠢,但......

当我创建大SQL命令时,我想保持我的代码可读,我这样做:

cmd.CommandText = "SELECT top 10 UserID, UserName " +
 "FROM Users " +
 "INNER JOIN SomeOtherTable ON xxxxx " +
 "WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)

看到连接?现在,为了保存性能,我现在这样做:

cmd.CommandText = @"SELECT top 10 UserID, UserName
     FROM Users
     INNER JOIN SomeOtherTable ON xxxxx
     WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)

它使代码可读,但保存了连接.现在它真的能保存任何性能,或者编译器是否足够智能"预连接"第一个字符串?

c# string-concatenation

6
推荐指数
2
解决办法
735
查看次数

如何在创建工件时让TeamCity压平目录

我们使用TeamCity 5.0使用sln2008构建运行器构建C#解决方案.我们有多个生成exe文件的项目.我们希望使用TeamCity的工件功能来展平所有目录.我们希望所有文件都进入一个没有子文件夹的文件夹,无论它来自哪个文件夹.TeamCity在创建工件时保留目录层次结构.

我们的工件是使用创建的

**\bin\Release\*.*=>PublishedFiles
Run Code Online (Sandbox Code Playgroud)

我们得到的是

  • PublishedFiles\FooProject\BIN \发布\ foo.exe的
  • PublishedFiles\BarProject\BIN \发布\ Bar.exe

我们想要的是什么

  • PublishedFiles\foo.exe的
  • PublishedFiles\Bar.exe

编辑

TeamCity 5.1将让我们更接近.

模式

SomeLibrary\bin\Release\*.dll => PublishedFiles
Run Code Online (Sandbox Code Playgroud)

会得到我们

  • PublishedFiles\SomeLibrary.dll
  • PublishedFiles\SomeDependency.dll

**\bin\Release\*.dll => PublishedFiles
Run Code Online (Sandbox Code Playgroud)

仍将保留我们不想要的结构.

目前我们使用MSBuild来展平结构,然后使用TeamCity将其归档.跳过MSBuild部分会很高兴.

teamcity

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

如何在Nunit中调用WPF Dispatcher?

我想测试一个呈现具有数据字段值的文本块的应用程序.渲染完成后,我想获得实际的宽度和实际高度.一切正常.当我尝试测试应用程序时,首先出现问题.我无法从测试项目中调用调度程序.

以下是代码.

this.Loaded += (s, e) =>
{
    TextBlock textBlock1 = new TextBlock();

    //// Text block value is assigned from data base field.
    textBlock1.Text = strValueFromDataBaseField;        
    //// Setting the wrap behavior.
    textBlock1.TextWrapping = TextWrapping.WrapWithOverflow;
    //// Adding the text block to the layout canvas.
    this.layoutCanvas.Children.Add(textBlock1);

    this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        (Action)(() =>
            {
                //// After rendering the text block with the data base field value. Measuring the actual width and height.
               this.TextBlockActualWidth = textBlock1.ActualWidth;
               this.TextBlockActualHeight = textBlock1.ActualHeight;

               //// Other calculations based on the actual widht …
Run Code Online (Sandbox Code Playgroud)

c# wpf nunit dispatcher nunit-mocks

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

如何优化此代码

它有一个属性:字符串代码和其他10个.

公共代码是字符串列表(string [])汽车列表(Car [])filteredListOfCars是List.

for (int index = 0; index < cars.Length; index++)
{
    Car car = cars[index];
    if (commonCodes.Contains(car.Code))
    {
         filteredListOfCars.Add(car);
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这片方法的时间太长了.

我有大约5万条记录

我怎样才能降低执行时间?

c# performance

6
推荐指数
2
解决办法
405
查看次数

C#中的反射和参数

我正在编写一个运行"事物"的应用程序.

想法是数据库包含程序集,方法信息以及参数值.计时器将出现,反映要运行的方法,添加参数然后执行方法.

除参数外,一切都很好.

因此,假设该方法接受CustomerType的ENUM,其中CustomerType具有CustomerType.Master和CustomerType.Associate两个值.

编辑 我不知道将传入的参数类型.ENUM用作示例 END OF EDIT

我们想要运行方法"X"并传入参数"CustomerType.Master".在数据库中,将存在"CustomerType.Master"的varchar条目.

如何将字符串"CustomerType.Master"转换为一般类型为"Master"的CustomerType?

提前致谢,

吉姆

c# reflection

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

使用LINQ到实体的OrderBy和Distinct

这是我的LINQ查询:

(from o in entities.MyTable
orderby o.MyColumn
select o.MyColumn).Distinct();
Run Code Online (Sandbox Code Playgroud)

结果如下:

{"a", "c", "b", "d"}
Run Code Online (Sandbox Code Playgroud)

这是生成的SQL:

SELECT 
[Distinct1].[MyColumn] AS [MyColumn]
FROM ( SELECT DISTINCT 
    [Extent1].[MyColumn] AS [MyColumn]
    FROM [dbo].[MyTable] AS [Extent1]
)  AS [Distinct1]
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我的订单在哪里,该死的?

sql linq linq-to-entities sql-server-2008

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

表格关闭时不应该

我的申请表中有两个表格.我打电话的方式Form 2是这样的:

表格1:

private void btnTest_Click(object sender, EventArgs e)
{
    DialogResult result = new System.Windows.Forms.DialogResult();
    Add_Link addLink = new Add_Link();
    result=addLink.ShowDialog();

    if (result == System.Windows.Forms.DialogResult.OK)
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

表格2:

private void btnAdd_Click(object sender, EventArgs e)
{            
    if(validURL(txtSubLink.Text))
    {
        HyperLink add = new HyperLink(txtSubLink.Text,txtSubText.Text,"URL");
        this.build = add;                 
    }
    else
    {
        MessageBox.Show("Valid URL Needed! " + txtSubLink.Text, "ERROR");
    }             
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果用户单击该Add按钮,错误消息显示(因为数据无效或文本框为空)它关闭表单.我只希望用户关闭表单并在两个文本框包含正确的数据时传回数据.如果两个文本框不包含正确的数据或者为空,则当用户单击"添加"时,应显示错误消息,并且Form 2应该保持打开状态,如何实现...?

c# winforms

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