小编use*_*939的帖子

调用空函数需要多长时间?

我有一个实现接口的项目列表.对于这个问题,让我们使用这个示例界面:

interface Person
{
  void AgeAYear();
}
Run Code Online (Sandbox Code Playgroud)

有两个班

class NormalPerson : Person
{
  int age = 0;

  void AgeAYear()
  {
    age++;
    //do some more stuff...
  }
}


class ImmortalPerson : Person
{
  void AgeAYear()
  {
    //do nothing...
  }
}
Run Code Online (Sandbox Code Playgroud)

由于其他原因,我需要他们两个列表.但是对于这个调用,当我遍历我的Persons 列表时,我可能会调用空函数. 这会对性能产生影响吗?如果是这样,多少钱? 对于所有意图和目的,空函数是否会被优化掉?


注意:在实际示例中,ImmortalPerson还有其他具有代码的方法 - 它不仅仅是一个不执行任何操作的对象.

c# performance function compiler-optimization

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

找出type是否可实例化

在C#中,如何确定是否Type可以实例化? 我试图避免Activator.CreateInstance异常.

我当前的方法是type.IsClass && !type.IsInterface,但我担心这可能会失败抽象类,等等.我也考虑过检查type.TypeInitializer == null,但我不确定这是否也是万无一失的.

找出a Type是否可实例化的最简单/最有效的方法是什么?

c# reflection types interface instantiation

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

使用Process.Start C#通过快捷方式运行应用程序

有没有办法通过C#应用程序的快捷方式运行应用程序?

我试图从我的C#应用​​程序运行.lnk.快捷方式包含大量参数,我更希望应用程序不必记住.

尝试通过Process.Start运行快捷方式会导致异常.

谢谢

编辑:

例外是"Win32Exception":"指定的可执行文件不是有效的Win32应用程序."

这是(缩写)代码:

ProcessStartInfo info = new ProcessStartInfo ( "example.lnk" );
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.RedirectStandardInput = true;
Process whatever = Process.Start( info );
Run Code Online (Sandbox Code Playgroud)

c# shortcut

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

具有两个不相等(唯一)类型的泛型类

是否可以实现一个约束为两个唯一通用参数的类?

如果不是,那是因为它没有实现,还是因为语言结构(继承)是不可能的?

我想要一些形式:

class BidirectionalMap<T1,T2> where T1 != T2
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我正在实现双向字典.这主要是好奇心问题,而不是需要.


从评论中复述:

  1. 丹:"如果不满足这种约束,会有什么负面影响?"

  2. 我:"然后用户可以使用map [t1]和map [t2]进行索引.如果它们是相同的类型,则没有任何区别,也没有任何意义."

  3. Dan:编译器实际上允许[两个泛型类型参数来定义不同的方法重载],所以我很好奇; 它是否随意选择其中一种方法来调用?

c# generics constraints

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

自动检索EXE文件版本以嵌入NSIS安装程序元数据

我试图通过从我的可执行文件(在这种情况下,.NET应用程序)中自动检索版本信息来删除应用程序发布过程中的另一个步骤.

到目前为止,我已经能够获得有限的NSIS知识,但我很快就知道这还不够.

第1步:在可执行文件中声明版本信息

在AssemblyInfo.cs中,我声明[assembly: AssemblyVersion("1.0.0.1")].这成功地使版本信息出现在已编译的可执行文件中(在"文件版本"和"产品版本"下).

第2步:从可执行文件中检索版本信息

根据关于"GetFileVersion"的这篇文章,导入"FileFunc.nsh"允许您从可执行文件中检索版本信息.

使用的代码:

Section
    Var /GLOBAL version
    ${GetFileVersion} "C:\test.exe" $version
    ...
SectionEnd
Run Code Online (Sandbox Code Playgroud)

第3步:验证函数调用的内容

根据文档的5.1.7节,我应该能够在编译期间使用"!echo"命令打印到命令行.打印变量(或常量等)的内容之间的区别仍然让我困惑,所以我尝试了所有这四个选项:

!echo $version
!echo "$version"
!echo "${version}"
!echo ${version}
Run Code Online (Sandbox Code Playgroud)

这导致:

$version (InstallScript.nsi:15)
$version (InstallScript.nsi:16)
${version} (InstallScript.nsi:17)
${version} (InstallScript.nsi:18)
Run Code Online (Sandbox Code Playgroud)

第4步:声明安装程序元数据

根据4.8.3节,我应该可以通过VIProductVersion和添加安装程序元数据VIAddVersionKey.

VIProductVersion $version 
VIAddVersionKey "FileVersion" "$version"
Run Code Online (Sandbox Code Playgroud)

在构建的安装程序中,这会将字符串"$ version"添加到指定的字段中.


ToString()在NSIS中是否有相同的东西?如何访问变量的内容?变量名的打印是否意味着它没有内容?如何验证是否GetFileVersion正确调用,正确执行并返回值?

versioning metadata nsis

7
推荐指数
2
解决办法
4655
查看次数

如何衡量在函数中花费的总时间?

我有一个实用功能,我怀疑它占用了应用程序执行时间的很大一部分.使用Time Profiler查看调用堆栈,此函数占用调用它的任何函数的大部分执行时间.但是,由于此实用程序功能是从许多不同的来源调用的,因此我无法确定总体而言,这是否是我的优化时间的最佳用途.

如何在程序执行期间查看在此函数中花费的总时间,无论是谁调用它?

为清楚起见,我想将所选条目与该函数的所有其他调用组合到一个条目中: Profiler日志

performance xcode instruments

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

非多行左对齐制表符控件

是否可以在winforms中实现可滚动、非多行、左对齐的tabcontrol?

如果可以通过所有者绘图实现这一点,那么在实现我自己的代码时是否有任何现有代码可以用作参考?

编辑: “左对齐”表示 tabControl 属性设置为:“Alignment=Left”(与从左到右相反)。

c# tabs drawing winforms

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

当Dock更改时,UserControl不在FlowLayoutPanel内呈现

当我将UserControls添加到FlowLayoutPanel时,它们会正确显示.当我在添加它们之前更改UserControls上的Dock或Anchor属性时,它们仍然会被添加但不会渲染.

根据" 如何:锚定和停靠儿童控制 "这应该是可能的.

  • 我可以告诉控件是添加的(尽管没有绘图),因为添加足够的控件会导致出现垂直滚动条.
  • 将UserControls的"Dock"属性设置为"Left"或"None"将导致它们呈现,但没有其他选项.
  • 将UserControls上的"Anchor"属性设置为除Top |之外的任何内容 左不呈现.
  • 在添加控件之前或之后设置底座没有区别(Add,Dock vs. Dock,Add).
  • FlowLayoutPanel本身是停靠(Fill),FlowDirection设置为TopDown,WrapContents设置为false,AutoScroll设置为true,否则默认.

我使用的是.NET 3.5.


在回答评论时,两条注释行是我试图更改基座的位置.第二点肯定更有意义,但我尝试了另一个,因为它不会伤害.

public void CreateObjectControl( object o )
{
    ObjectControl oc = new ObjectControl();

    oc.MyObject = o;

    //This was a spot I mentioned:
    //oc.Dock = DockStyle.Fill;

    ObjectDictionary.Add( o, oc );
    flowLayoutPanel1.Controls.Add( oc );

    //This is the other spot I mentioned:
    oc.Dock = DockStyle.Fill;
}
Run Code Online (Sandbox Code Playgroud)

c# anchor dock flowlayoutpanel winforms

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

平移后,单元格停止响应选择

问题:

完成平移手势后,启动点击下的单元格不再响应选择.didSelectItemAtIndexPath将在点击其他单元格时触发,但不会触发平移手势下的单元格.

如何让该单元格再次响应触摸输入?或者,我如何检查该单元是否卡在响应事件?

背景:

  • 我有一堆带有一堆单元格的UICollectionView.点击此集合视图中的单元格会触发didSelectItemAtIndexPath.
  • 集合视图具有平移手势识别器.平移会创建视图图像并将其平移到屏幕上.在平移手势的持续时间内,集合视图保留在其他视图下方.

理论:

由于平底锅,选择可能永远不会完成.也许在UI中有一个触摸事件.如果我能清除它,也许细胞会再次响应.我尝试过设置[panHandler setCancelsTouchesInView:YES],但它没有改变任何东西.

更新1:

在评论中,有几个人建议图像可能会悬空并阻挡触摸.在传递给的完成块中animateWithDuration,我有以下几行:

[self.regionScreenshot removeFromSuperview];
self.regionScreenshot = nil;
Run Code Online (Sandbox Code Playgroud)

我确认这些行已执行.

导致我认为不是问题的另一个因素是,在所有细胞中,只有已经习惯拖曳的细胞受到影响.周围的细胞仍然有反应.

更新2:Code&Gif

- (IBAction)handlePanFrom:(UIPanGestureRecognizer*)recognizer
{
    CGPoint translation = [recognizer translationInView:recognizer.view];
    float transparencyLevel = 0.85;

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        SFCYRegion* centerRegion = self.region;

        //North
        if (centerRegion.regionToNorth != nil)
        {
            self.region = centerRegion.regionToNorth;
            [self reloadRegion];
            self.regionToNorthScreenshot = [self.collectionView snapshotViewAfterScreenUpdates:YES];
        }
        else
        {
            self.regionToNorthScreenshot = [[UIView alloc] init];
            self.regionToNorthScreenshot.backgroundColor = [UIColor darkGrayColor];
        }
        [self.view.superview addSubview:self.regionToNorthScreenshot];
        self.regionToNorthScreenshot.alpha = transparencyLevel;
        self.regionToNorthScreenshot.frame = northFrame; …
Run Code Online (Sandbox Code Playgroud)

objective-c selection pan ios uicollectionviewcell

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

Socket ReceiveAsync是否支持UDP?

我已经看到了TCP的ReceiveAsync示例,但没有看到UDP.ReceiveAsync是否与UDP兼容?如果是这样,你看过任何例子吗?

谢谢.

c# sockets asynchronous udp

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