小编neo*_*862的帖子

如何在C#中使用参数化构造函数创建泛型类型参数的实例

我正在尝试编写一个帮助器方法,该方法将记录消息并使用相同的消息抛出指定类型的异常.我有以下内容:

private void LogAndThrow<TException>(string message, params object[] args) where TException : Exception, new()
{
    message = string.Format(message, args);
    Logger.Error(message);
    throw new TException(message);
}
Run Code Online (Sandbox Code Playgroud)

在添加new()约束之前,编译器抱怨说没有它我无法实例化TException.现在我收到的错误消息是"在创建类型参数'TException'的实例时无法提供参数".我尝试使用无参数构造函数创建实例,然后设置Message属性,但它是只读的.

这是语言的限制还是我不知道的解决方案?也许我可以使用反射,但这对于这么简单的任务来说太过分了.(而且非常丑陋,但这是个人观点的问题.)

c# generics exception

21
推荐指数
2
解决办法
3300
查看次数

TreeView标签编辑问题

我有一个像这样的节点的树视图:"Foo(1234)",并希望允许用户重命名节点,但只允许Foo部分,没有(1234).我首先尝试更改节点文本,BeforeLabelEdit如下所示:

private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    e.Node.Text = "Foo";
}
Run Code Online (Sandbox Code Playgroud)

但是当我单击节点进行编辑时,文本框中会出现"Foo(1234)".

好的,那就让我们试试别的吧.

我设置treeView1.LabelEdit为false,然后执行以下操作:

private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (treeView1.SelectedNode == treeView1.GetNodeAt(e.Location))
        {
            treeView1.SelectedNode.Text = "Foo";
            treeView1.LabelEdit = true;
            treeView1.SelectedNode.BeginEdit();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后AfterLabelEdit,我LabelEdit回到了假.

你猜怎么着?这也不起作用.它将节点文本更改为"Foo",但不显示编辑文本框.

有任何想法吗?谢谢

c# treeview

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

字节变量如何存储在内存中?

我正在读一本关于C#(Pro C#和Andrew Troelsen的.NET 4平台)的书,我刚读过这段话:

如果要构建将部署到低内存设备(例如支持.NET的手机或PDA)并且需要尽可能节省内存的.NET应用程序,则更改枚举的基础类型会很有帮助.

字节使用更少的内存是真的吗?出于性能原因,它们不是存储在4个字节上吗?我记得在某个地方读过后者,但我找不到任何关于它的信息,甚至在C#规范中都没有.

c# memory byte

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

如何访问堆栈上的变量?

假设我们有这些局部变量:

int a = 0;
int b = 1;
int c = 2;
int d = 3;
Run Code Online (Sandbox Code Playgroud)

据我所知,这些将在系统堆栈上分配,如下所示:

|   |
| 3 | d
| 2 | c
| 1 | b
|_0_| a
Run Code Online (Sandbox Code Playgroud)

这是否意味着为了获得a的值,必须首先从堆栈中弹出d,c和b的值?如果是这样,这些值会在哪里出现?这是否意味着访问最近声明的变量会更快?或者我错过了什么(我怀疑是这种情况),整个事情以其他方式起作用?

编辑:谢谢,伙计们!

variables stack memory-access low-level

5
推荐指数
2
解决办法
534
查看次数

ListView中的图像质量很差

我正在使用项目填充ListView并从ImageList(在设计器中)添加图像.但是,即使我将ImageList中的图像尺寸设置为原始尺寸(16x16),图像也会以非常差的质量显示.看一看:

可怕的图像质量http://balazsbotond.hu/downloads/listview-icons.png

原始图像是美丽,锐利的PNG图标.我能做什么?

c# listview image winforms

5
推荐指数
2
解决办法
4236
查看次数