小编maf*_*afu的帖子

有没有办法用epsilon获取浮点数的哈希码?

众所周知,通过==比较浮点数通常是一个错误.在我写的3D矢量类(具有浮点分量X,Y,Z)中,如果它们的距离被认为是零,则认为两个矢量相等.

    public override bool Equals(object obj)
    {
        if (obj == null) {
            return false;
        }

        if (GetType () != obj.GetType ()) {
            return false;
        }

        float d = DistSq ((Vec) obj);

        return IsConsideredZero (d);
    }

    public float DistSq(Vec p)
    {
        Vec d = this - p;
        return d.LengthSq ();
    }

    public float LengthSq()
    {
        return X * X + Y * Y + Z * Z;
    }

    private const float VEC_COMPARE_EPSILON_ABS = 1E-05f;
    public static bool IsConsideredZero(float f)
    {
        return …
Run Code Online (Sandbox Code Playgroud)

floating-point hashcode

12
推荐指数
3
解决办法
2823
查看次数

C#从类列表中提取字段列表

我有一个特定类的元素列表.该类包含一个字段.

class Foo {public int i;}
List<Foo> list;
Run Code Online (Sandbox Code Playgroud)

我想将列表中所有项目的字段提取到一个新列表中.

List<int> result = list.ExtractField (e => e.i); // imaginary
Run Code Online (Sandbox Code Playgroud)

肯定有多种方法可以做到这一点,但我还没有找到一个漂亮的解决方案.我认为linq可能有所帮助,但我不确定究竟是怎么回事.

c# linq

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

如何判断目录是C#中的回收站?

给定一个文件夹,我怎么知道它是一个回收站?我找到了C++ 的答案,但没有找到C#的答案.

我的第一个想法是检查FileAttributes.System(在我的情况下这将是一个可接受的近似值)但实际上该标志在回收文件夹上被清除.

使用硬编码文件夹名称的原始解决方案是不可能的(毕竟我们在2009年).

c# recycle-bin

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

是否可以将List绑定到WinForms中的ListView?

我想将ListView绑定到List<string>.我正在使用此代码:

somelistview.DataBindings.Add ("Items", someclass, "SomeList");
Run Code Online (Sandbox Code Playgroud)

我收到此异常:无法绑定到属性'Items',因为它是只读的.

如果Items属性是只读的,我不知道如何绑定?

c# data-binding winforms

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

调用和BeginInvoking MessageBox有什么区别?

在表格中,比较

BeginInvoke (new Action (() => {
    MessageBox.Show ());
}));
Run Code Online (Sandbox Code Playgroud)

Invoke (new Action (() => {
    MessageBox.Show ());
}));
Run Code Online (Sandbox Code Playgroud)

有什么区别,什么时候应该使用一个而不是另一个?如何通过MessageBox的消息泵来影响行为?

我做了一些测试,发现两种方法都阻止了UI.

唯一的区别是Invoke实际上是立即调用的,而BeginInvoke需要(非常短的)时间直到代码运行.这是可以预料的.

.net c# messagebox winforms

12
推荐指数
2
解决办法
4736
查看次数

用于在手中查找街道和同类的算法

这实际上是一个基于麻将的问题,但基于Romme甚至基于扑克的背景也很容易理解.

在Mahjong中,14个瓷砖(瓷砖就像扑克中的卡片)被安排成4套和一对.街道("123")总是使用3个瓷砖,而不是更多而不是更少.一组相同类型("111")也包含3个瓷砖.这导致3*4 + 2 = 14个瓦片的总和.

有一些例外,如Kan或十三个孤儿,这里没有相关性.颜色和值范围(1-9)对于算法也不重要.

我正在尝试确定手是否可以按上述方式排列.出于某些原因,它不仅应该能够处理14个而且可以处理任意数量的瓷砖.(下一步是找到需要交换多少个牌才能完成一手牌.)

例子:

11122233344455 - 足够容易,4套和一对.
12345555678999- 123,456,789,555,99
11223378888999- 123,123,789,888,99
11223344556789- 不是有效的手

我目前尚未实现的想法是这样的:对于每个瓷砖,尝试制作a)街道b)一组c)一对.如果没有工作(或者将有> 1对),请返回上一次迭代并尝试下一个选项,或者,如果这是最高级别,则失败.否则,从剩余的切片列表中删除使用过的切片,然后继续下一次迭代.

我相信这种方法有效并且速度也相当快(性能是一个"不错的奖励"),但我对你的看法很感兴趣.你能想到其他解决方案吗?这个或类似的东西是否已存在?

(不是作业,我正在学习麻将.)

algorithm poker mahjong

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

如何基于简单的多边形绘制图像?

我想将一个大致矩形的区域复制到一个矩形区域.例:

两个区域都由角点定义.总体方向保持不变(没有翻转等).

简单地旋转源图像不起作用,因为相对的侧面可能具有不同的长度.

到目前为止,我发现在纯C#中没有办法做到这一点(手动像素复制除外),所以我想我必须求助于Windows API或某些第三方库?

.net c# image-manipulation

12
推荐指数
2
解决办法
5362
查看次数

在C#属性setter中为ArgumentException分配给'paramName'参数的值?

如果将无效值传递给属性setter并且ArgumentException抛出(或者从它派生的类的可能性),那么应该为paramName参数分配什么值?

value,因为它似乎是实际的论点?

传递财产的名称不是更清楚吗?

c# exception naming-conventions

11
推荐指数
2
解决办法
1971
查看次数

避免配置系统定义的Pen和Brush实例

我理解最好在PenBrush实例上调用Dispose(),除非它们已经设置为系统预定义值(例如System.Drawing.Brushes, System.Drawing.PensSystem.Drawing). SystemBrushes)

尝试处置系统定义的资源会导致抛出异常.

除了在try/catch中包装Dispose()调用之外,这些资源中的一个是否引用了系统定义的值或用户定义的值,这似乎并不明显.

system.drawing gdi+ idisposable winforms

11
推荐指数
3
解决办法
1735
查看次数

为什么Java不允许通过实例方法隐藏静态方法?

http://docs.oracle.com/javase/tutorial/java/IandI/override.html所示,Java确实允许

  1. 通过实例方法覆盖实例方法
  2. 通过静态方法隐藏静态方法

我的问题是为什么Java不允许通过实例方法隐藏静态超类方法.这可以这样做:

class Base {
    static void foo () {}
}

class Derived extends Base {
    void foo () {}
    void access () {
        foo ();
        Base.foo ();
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有看到上述方法有任何特殊问题 - 它只是像"允许的"隐藏静态的"混乱/复杂".

java inheritance

11
推荐指数
2
解决办法
6701
查看次数