小编Ani*_*Ani的帖子

参数计数与Invoke不匹配?

下面的代码块导致错误:用户代码未处理TargetParameterCountException.参数计数不匹配.

    public void AddListViewItem(string[] Data)
    {
        if (InvokeRequired)
        {
            Invoke(new Action<string[]>(AddListViewItem), Data);
        }
        else
        {
            ListViewData.Items.Add(Data[0]).SubItems.AddRange
            (
                new string[]
                { 
                    Data[1],
                    Data[2],
                    Data[3],
                }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# parameters delegates invoke winforms

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

在什么情况下System.Collections.ArrayList.Add会抛出IndexOutOfRangeException?

我们在生产环境中遇到了奇怪的错误,我们无法调试或注入日志代码.我试图解决这个问题但是跟踪堆栈跟踪让我感到困惑.

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Collections.ArrayList.Add(Object value)
   at ...
Run Code Online (Sandbox Code Playgroud)

根据MSDN Add方法应该只抛出NotSupportedException.

我不知道这里发生了什么.你呢?

.net collections arraylist

14
推荐指数
3
解决办法
5853
查看次数

从bookmarklet将文本复制到剪贴板

我正在尝试编写一个小书签,可以从活动页面中提取一些文本并将其加载到剪贴板中.

提取很容易,但我真的很难做剪贴板复制部分.目前,我正在alert阅读文本并点击Ctrl+ C来复制消息框中的文本,这并不理想.

我已经阅读了如何在JavaScript中复制到剪贴板以及其他建议我使用zeroclipboard的问题,但我不知道如何从书签中完成这项工作,考虑到我必须加载外部 flash和javascript资源才能使用图书馆.

我没有弄乱页面的DOM来实现这一点,或者必须在我的浏览器(谷歌浏览器)上启用一些权限,考虑到这只是一个私人书签.

任何指针将不胜感激.

javascript clipboard google-chrome bookmarklet

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

为什么这段代码不能证明读/写的非原子性?

阅读 这个问题,我想测试一下我是否可以证明对这种操作的原子性无法保证的类型的读写非原子性.

private static double _d;

[STAThread]
static void Main()
{
    new Thread(KeepMutating).Start();
    KeepReading();
}

private static void KeepReading()
{
    while (true)
    {
        double dCopy = _d;

        // In release: if (...) throw ...
        Debug.Assert(dCopy == 0D || dCopy == double.MaxValue); // Never fails
    }
}

private static void KeepMutating()
{
    Random rand = new Random();
    while (true)
    {
        _d = rand.Next(2) == 0 ? 0D : double.MaxValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,即使在执行了整整三分钟之后,断言也拒绝失败.是什么赋予了?

  1. 测试不正确.
  2. 测试的具体时序特性使得断言不太可能/不可能失败.
  3. 概率是如此之低,以至于我必须运行测试更长时间以使其可能会触发.
  4. 与C#规范相比,CLR提供了更强的原子性保证.
  5. 我的OS /硬件提供比CLR更强的保证.
  6. 别的什么?

当然,我不打算依赖规范没有明确保证的任何行为,但我想更深入地了解这个问题. …

.net c# double atomic thread-safety

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

与Java不同,为什么拳击是.NET中的原始值类型未缓存?

考虑:

int a = 42;

// Reference equality on two boxed ints with the same value
Console.WriteLine( (object)a == (object)a ); // False

// Same thing - listed only for clarity
Console.WriteLine(ReferenceEquals(a, a));  // False
Run Code Online (Sandbox Code Playgroud)

显然,每个装箱指令分配一个单独的盒装实例Int32,这就是为什么它们之间的引用相等失败的原因.此页面似乎表明这是指定的行为:

box指令将'raw'(未装箱)值类型转换为对象引用(类型O).这是通过创建新对象 并将值类型中的数据复制到新分配的对象中来实现的.

但为什么会出现这种情况呢?有没有令人信服的理由为什么CLR不选择Int32为所有原始值类型(都是不可变的)保持盒装s 的"缓存" ,甚至更强的共同值?我知道Java有这样的东西.

在没有泛型的时代,对于ArrayList主要由小整数组成的大型内存需求以及GC工作负载,它是否会帮助很多?我也肯定存在一些现代的是.NET应用程序使用泛型,但是由于各种原因(反射,接口分配等),跑起来大拳分配可与可大量减少(什么似乎是)一个简单的优化.

那是什么原因?我没有考虑过一些性能影响(我怀疑是否测试该项目是否在缓存中等将导致净性能损失,但我知道什么)?实施困难?不安全代码的问题?打破向后兼容性(我想不出任何好的理由,为什么一个精心编写的程序应该依靠现有的行为)?或者是其他东西?

编辑:我真正建议的是"常见" 原语静态缓存,就像Java所做的那样.有关示例实现,请参阅Jon Skeet的回答.我知道在运行时为任意,可能是可变的值类型或动态 "memoizing"实例执行此操作是完全不同的事情.

编辑:为清晰起见改变了标题.

.net java boxing memory-management value-type

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

表达式<TDelegate> .Compile和Garbage Collection

当我将表达式编译成可执行代码并获得委托时 - 当不再存在对该委托的引用时,代码是否会被垃圾收集?

有没有这方面的文件?因为我在MSDN中找不到任何有用的东西.

.net c# garbage-collection expression-trees

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

代表指出了什么?

我已经读过,引用类型包含对可以存储在托管堆上的实际对象的引用.当一个方法被"赋值"给一个委托引用变量时,该引用指向哪个内存?这个内存块与实际的功能代码有什么关系?

.net c# delegates

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

替换lambda表达式中的参数

考虑这段代码:

public class Foo
{
    public int a { get; set; }
    public int b { get; set; }
}

private void Test()
{
    List<Foo> foos = new List<Foo>();
    foos.Add(new Foo());
    foos.Add(new Foo());
    Expression<Func<Foo, int>> exp0 = f => f.a * f.b;
    Expression<Func<int>> exp1 = () => foos[0].a * foos[0].b;
    Expression<Func<int>> exp2 = () => foos[1].a * foos[1].b;
}
Run Code Online (Sandbox Code Playgroud)

你怎么能把exp0它变成两个与exp1和相同的表达式exp2.请注意,我不想仅为exp0每个Fooin 评估foos,而是获得两个新表达式.

[更新]:

基本上,我希望能够扩大或"扁平化"传递给A的表达Linq扩展方法,如Sum入枚举每个项目一个表达,因为这些枚举是静态的,因为我已经有代码读取不表达获取参数(然后将它们转换为另一种语言). …

c# lambda partial-application expression-trees

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

使用C#删除换行符

我从数据库字段中获取一个名为'Description'的字符串,它有换行符.它看起来像这样:


物品标题

描述在这里.这是项目的描述.


如何删除换行符.我尝试了以下功能,但它无法正常工作:

public string FormatComments(string comments)
{
    string result = comments.Replace(@"\r\n\", "");
    result = result.Replace(" ", "");
    return result;
}
Run Code Online (Sandbox Code Playgroud)

请建议解决方案.

此致,Asif Hameed

.net c# string c#-3.0 c#-4.0

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

使用LINQ和LINQ扩展计算Dictionary中的值

我有一个字典,看起来像这样:

Dictionary<String, List<String>>

test1 : 1,3,4,5
test2 : 2,3,6,7
test3 : 2,8
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ和LINQ扩展计算所有值?

.net c# linq linq-to-objects dictionary

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