小编Nic*_*ick的帖子

我应该删除事件处理程序吗?

我有一个列表Button,并为每个按钮添加一个事件处理程序:

List<Button> buttons = new List<Button>();

for (int i = 0; i < 10; i++)
{
   Button btn = new Button();
   btn.Click = new RoutedEventHandler(OnbtnClick);
   buttons.Add(btn);
}
Run Code Online (Sandbox Code Playgroud)

然后我清除列表:

/* Have I to remove all events here (before cleaning the list), or not?
foreach (Button btn in buttons)
   btn.Click -= new RoutedEventHandler(OnbtnClick);
*/

buttons.Clear();
Run Code Online (Sandbox Code Playgroud)

c# event-handling

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

我应该为包含Thread的类实现IDisposable

我有一个使用Thread类的类:

class A
{
    public Thread thread
    { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我应该实现IDisposable并将Thread属性设置为null吗?

class A : IDisposable
{
    public Thread Thread
    { get; set; }

    protected bool Disposed
    { get; set; }


    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!this.Disposed)
        {
            if (disposing)
            {
                if (Thread != null)
                    Thread = null;
            }

            Disposed = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或不?
为什么?

c# multithreading idisposable

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

如何在两个进程之间交换数据?

可能重复:
C#中的IPC机制 - 用法和最佳实践

我有两个不同的过程:AB.

该进程A希望向进程发送B一些数据(字节,字符串,结构等数组......).所以假设A需要发送以下缓冲区:

var buffer = new byte[100].
SendToAnotherProcess(B, buffer);
Run Code Online (Sandbox Code Playgroud)

并且B需要接收此缓冲区:

byte[] buffer;
ReceiveFromAnotherProcess(A, out buffer);
Run Code Online (Sandbox Code Playgroud)

这样做最简单的解决方案是什么?

c# process inter-process-communicat .net-3.5

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

选择后截断的ListViewItem文本 - Compact Framework

我有ListView一些ListViewItems(只有文字).

listView1 = new ListView
{
    View = System.Windows.Forms.View.Details,
    HeaderStyle = ColumnHeaderStyle.None
};


listView1.Columns.Add(String.Empty, -2, HorizontalAlignment.Left);
Run Code Online (Sandbox Code Playgroud)

以下图片是一个例子:

在此输入图像描述

问题是,当我选择其中一个项目时,文本会被截断,如下图所示:

在此输入图像描述

为什么?我怎么解决这个问题?

c# listview compact-framework listviewitem

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

避免在平台无关代码中实现定义的类型

我刚刚开始研究一个应该与平台无关的大项目,但它实际上使用了实现定义的类型,例如char.

这已经造成了一些问题,因为某些设备char默认signed为其他设备unsigned.

我想找到一个解决方案,以避免在必须与平台无关的代码中使用实现定义的类型.

  1. 什么是最好的解决方案?使用编译器参数(例如:-funsigned-char),s或其他将所有char变量重新定义为unsigned char(或signed char)typedef
  2. 如果标准是签名还是未签名,是否还有其他类型的标准?

c char platform-independent

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

局部变量范围错误 - foreach 循环

我有以下代码:

if (Current == false)
{
    foreach (var visual in visuals)
        visual.IsSelected = value;
}

Visual visual = visuals[currentIndex];
Run Code Online (Sandbox Code Playgroud)

当我编译时,我有这个错误:

不能在此范围内声明名为“visual”的局部变量,因为它会给“visual”赋予不同的含义,“visual”已在“子”范围中用于表示其他内容

另外,如果我不声明visual变量,那就是我替换:

Visual visual = visuals[currentIndex];
Run Code Online (Sandbox Code Playgroud)

和:

visual = visuals[currentIndex];
Run Code Online (Sandbox Code Playgroud)

错误如下:

当前上下文中不存在名称“visual”

为什么会有这种行为?

c# foreach scope

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

解析一个浮点数的C字符串

我有一个C字符串,其中包含由逗号和空格分隔的浮点数列表.每对数字由一个(或多个)空格分隔,并表示x和y字段由逗号分隔的点(并且可选地由空格分隔).

" 10,9 2.5, 3   4 ,150.32 "
Run Code Online (Sandbox Code Playgroud)

我需要解析这个字符串以填充列表Point(x, y).
以下是我目前的实施:

const char* strPoints = getString();
std::istringstream sstream(strPoints);

float x, y;
char comma;

while (sstream >> x >> comma >> y)
{
   myList.push(Point(x, y));
}
Run Code Online (Sandbox Code Playgroud)

由于我需要解析很多(最多500,000)这些字符串,我想知道是否有更快的解决方案.

c++ string parsing

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

Rcpp按名称获取元素 - $运算符

R我可以这样写:

l <- list(a=0, b="10");
Run Code Online (Sandbox Code Playgroud)

并获取名为的元素的值,b如下所示:

x <– l$b
Run Code Online (Sandbox Code Playgroud)

有没有办法通过使用Rcpp::List对象获得相同的结果?

c++ r rcpp

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

本征浮点精度

我在使用浮点精度时遇到麻烦 Eigen

我有两个Eigen::MatrixXd; 第一个矩阵A(nx1)仅包含正整数,而第二个矩阵B(nx1)仅包含一列并填充相同的实数(例如:-0.714312)。

我需要计算以下内容Eigen::MatrixXd

const auto exponential = [](double x)
{ return std::exp(x); };


MatrixXd W = B.unaryExpr(exponential);
MatrixXd residuals = A - W;
Run Code Online (Sandbox Code Playgroud)

问题是当我打印残差之和时:

cout << residuals.sum();
// output = 6.16951e-06
Run Code Online (Sandbox Code Playgroud)

通过使用R和相同的输入矩阵执行相同的操作,我得到了一个不同的值。

通过使用R矩阵,我得到-2.950208e-09。同时的元素的总和AB并且W是相同的两个中C++和在R

c++ precision r matrix eigen

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

双重比较 - 数字限制

我在理解以下代码时遇到一些麻烦:

double a = -1000;
double b = numeric_limits<double>::min();

if (a < b)
{
   cout << "why?";
}
Run Code Online (Sandbox Code Playgroud)

输出是:

为什么?

怎么可能-1000低于numeric_limits<double>::min()

c++

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