小编Dje*_*man的帖子

在C#中创建通用的对象列表

通过介绍,我正在为个人学习目的创建一个基本的Quadtree引擎.我希望这个引擎能够处理许多不同类型的形状(目前我正在使用圆形和方形),这些形状将在窗口中移动并在发生碰撞时执行某种操作.

这是我到目前为止的形状对象:

public class QShape {
    public int x { get; set; }
    public int y { get; set; }
    public string colour { get; set; }
}

public class QCircle : QShape {
    public int radius;
    public QCircle(int theRadius, int theX, int theY, string theColour) {
        this.radius = theRadius;
        this.x = theX;
        this.y = theY;
        this.colour = theColour;
    }
}

public class QSquare : QShape {
    public int sideLength;
    public QSquare(int theSideLength, int theX, int theY, string theColour) { …
Run Code Online (Sandbox Code Playgroud)

c# generics list object quadtree

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

Directory.EnumerateFiles读取顺序

Directory.EnumerateFiles方法的默认读取顺序是什么?它一致吗?

根据我的经验到目前为止,似乎是在文件创建之日,但我无法找到确认信息.

我问的原因是因为我正在处理的程序的一部分将二进制文件从目录加载到对象中,而这些对象又被加载到数组中.这些对象通过索引数组相互引用,这意味着它们加载到数组中的顺序需要保持一致(以避免转移索引).

我在这里时,还有另一个小问题.删除文件时,无论我做什么,它都会明显改变加载到数组中的文件的索引.有什么建议可以避免这个问题?由于担心存储问题,我之前一直避免使用字典(如果我可以避免存储,则宁愿不存储文本键数组)但如果这是唯一可行的方法,我可能还是要实现它.


编辑:在你的答案的优秀提示后,我已经使用文件的名称重构了字典方法.性能影响相当微不足道,可读性和可维护性都得到了极大的改善,因此效果非常好.

c# arrays indexing ienumerable file

8
推荐指数
2
解决办法
4212
查看次数

计算热图颜色

我正在制作由 HTML 表格组成的热图。该表包含n 个单元格,并具有最低值和最高值(最高值始终高于最低值)。每个单元格都有一个单元格值。所有这些值都是整数。

具有最低值的单元格是浅蓝色,缩放到具有最高值的单元格是深红色的点。请参阅下面的梯度以了解理想范围:

在此处输入图片说明

要计算每个单独的小区的十六进制颜色值,看看我的最低最高从表和单元格的值价值,将它们成返回RGB十六进制,准备与HTML的使用方法的背景色风格。

这是迄今为止的方法:

public string ConvertTotalToRgb(int low, int high, int cell)
{
    int range = high - low;

    int main = 255 * cell/ range;
    string hexR = main.ToString("X2");
    int flip = 255 * (1 - (cell/ range));
    string hexB = flip.ToString("X2");

    return hexR + "00" + hexB;
}
Run Code Online (Sandbox Code Playgroud)

具有最低的0值和最高的235值,则此方法返回下表(单元值在细胞)。

在此处输入图片说明

示例案例:如果最低为 20,最高为 …

c# rgb hex heatmap

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

System.Drawing - 参数无效

经过一些更多的测试后,我发现这个问题可能是由于图像以某种方式没有被及时加载以克隆到位图并显示.这是可能的还是没有?

注意:是的,标题中有此错误还有其他问题,但从一些研究来看,它似乎是一个含糊不清的错误,有许多可能的原因.我没有发现与我相同的情况有任何问题.

我收到以下错误.

System.ArgumentException was unhandled
HResult=-2147024809
Message=Parameter is not valid.
Source=System.Drawing
Run Code Online (Sandbox Code Playgroud)

它来自这段代码.似乎是随机的(即,有时候它会起作用,有时却不起作用.连续运行的次数越多,没有重新启动VS并重建项目,失败的可能性越大):

private Bitmap GetSprite(bool anim, int tsIndex, int tileIdx) {
    System.Drawing.Rectangle cloneRect;
    string prefix = (anim) ? "A" : "S";
    using (Bitmap b = new Bitmap(prefix + tsIndex.ToString() + ".png")) {
        if (anim) {
            cloneRect = new System.Drawing.Rectangle(BaseObjects.A_AnimSpriteSets[tsIndex].StaticRecs[tileIdx].X, BaseObjects.A_AnimSpriteSets[tsIndex].StaticRecs[tileIdx].Y, BaseObjects.A_AnimSpriteSets[tsIndex].RecWidth, BaseObjects.A_AnimSpriteSets[tsIndex].RecHeight);
        } else {
            cloneRect = new System.Drawing.Rectangle(BaseObjects.A_StaticSpriteSets[tsIndex].StaticRecs[tileIdx].X, BaseObjects.A_StaticSpriteSets[tsIndex].StaticRecs[tileIdx].Y, BaseObjects.A_StaticSpriteSets[tsIndex].RecWidth, BaseObjects.A_StaticSpriteSets[tsIndex].RecHeight);
        }
        return b.Clone(cloneRect, b.PixelFormat);
    }
}
Run Code Online (Sandbox Code Playgroud)

具体来说,第四行:

using (Bitmap b = new Bitmap(prefix + tsIndex.ToString() + ".png")) …
Run Code Online (Sandbox Code Playgroud)

c# system.drawing bitmap .net-4.0

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

COBOL等级88数据类型

这是非常基本的问题.

我必须为COBOL程序写出数据术语表.此数据词汇表包含有关每个变量的以下详细信息:

  1. 名称
  2. 数据类型
  3. 值范围(如果适用)
  4. 行号
  5. 富勒的名字

我有几个变量,包括88级开关.我的问题是:这些88级交换机是否被视为变量,我应该将它们包含在数据术语表中吗?或者,根据我必须使用的数据词汇表结构判断,在这种情况下是否应该忽略它们?

虽然我在这里,另一个简单的问题.填充程序是否应包含在数据词汇表中?该程序特别包含大量填充变量,大多数是简单的"PIC X"变量.

documentation cobol glossary

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

利用C#中的多态接口

通过介绍,我正在为个人学习目的创建一个基本的Quadtree引擎.我希望这个引擎能够处理许多不同类型的形状(目前我正在使用圆形和方形),这些形状将在窗口中移动并在发生碰撞时执行某种操作.

在先前询问关于通用列表主题的问题后,我决定使用多态性接口.最好的界面是一个界面利用,Vector2因为我的四叉树中出现的每个对象都有一个x,y位置,Vector2并且很好地覆盖了它.这是我目前的代码:

public interface ISpatialNode {
    Vector2 position { get; set; }
}

public class QShape {
    public string colour { get; set; }
}

public class QCircle : QShape, ISpatialNode {
    public int radius;
    public Vector2 position {
        get { return position; }
        set { position = value; }
    }
    public QCircle(int theRadius, float theX, float theY, string theColour) {
        this.radius = theRadius;
        this.position = new Vector2(theX, theY);
        this.colour = theColour;
    }
}

public class …
Run Code Online (Sandbox Code Playgroud)

c# stack-overflow polymorphism interface quadtree

0
推荐指数
1
解决办法
166
查看次数