小编use*_*322的帖子

字典与不同数据类型的数组作为值

我正在尝试使用整数,字符串和布尔数据类型的数组作为值创建一个Dictionary.我想,我应该使用object []作为值,所以声明看起来如此:

Dictionary<long, object[]> netObjectArray = new Dictionary<long, object[]>();
Run Code Online (Sandbox Code Playgroud)

每当我尝试将其元素的值设置为某个东西时,VS说字典中没有找到这样的键.

netObjectArray[key][2] = val; // ex: The given key was not present in the dictionary.
Run Code Online (Sandbox Code Playgroud)

我该如何正确使用它?

UPD1: 不知何故,在抛出此异常之前,另一个字典以类似的方式使用而没有问题:

Dictionary<long, Vector2> netPositions = new Dictionary<long, Vector2>();
netPositions[key] = new Vector2(x, y); // works ok
Run Code Online (Sandbox Code Playgroud)

在此本地显示之后,已分配值,字典现在包含该条目.为什么我的另一本字典不是这样的?

解决方案:在将值写入值数组之前,我们必须首先初始化该数组.这段代码适合我:

try { netObjectArray[key] = netObjectArray[key]; } // if the object is undefined,
catch { netObjectArray[key] = new object[123]; } // this part will create an object
netObjectArray[key][0] = new Vector2(x, y) as object; // and …
Run Code Online (Sandbox Code Playgroud)

c# arrays dictionary

4
推荐指数
1
解决办法
3011
查看次数

如果可以的话,可以使用很多`try`s而不是更多``

在我的游戏中,有很多东西被检查,并且索引经常超出界限,如果有时候没有绘制或检查的话,通常都可以.目前我的代码很容易阅读,但是在调试时,由于记录的异常,游戏会丢失一两帧.虽然它在VS之外工作正常.当我试图避免使用大量if语句的异常情况时,它大大降低了代码可读性并消除了低fps丢失.我想知道它是否有任何其他影响.

c# exception try-catch visual-studio

4
推荐指数
1
解决办法
141
查看次数

如何实现自动换行?

XNA有Spritefont类,它有一个MeasureString方法,可以返回a的宽度和高度string.我试图了解如何创建一个方法,该方法将有效地返回Environment.Newline插入在正确位置的字符串,以便如果适合某个宽度和高度(Rectangle用作参数).

c# xna word-wrap spritefont measurestring

4
推荐指数
1
解决办法
2975
查看次数

Pixel by Pixel Color Conversion WriteableBitmap => PNG仅黑色到具有透明度的颜色

我正在开发一个silverlight应用程序,我的所有图标都是PNG.

所有这些图标的颜色都是黑色,或者更确切地说是黑色到灰色,具体取决于alpha值.每个PNG都有透明的背景.

在我的应用程序中,我想做一个逐像素颜色从黑色或灰色变化,让我们说红色(黑色之前)或浅红色(灰色之前).

我认识到,遍历每个像素的字节,每个全黑像素的alpha值为255.灰色的那些像素值在1到254之间.α值为0似乎是透明的.黑色的RGB值均为0.

我的想法是,我改变了每个像素的颜色,但保留了alpha值,以便PNG保持原始的外观.

为此,我写了一个小函数,看起来像这样:

private static WriteableBitmap ColorChange(WriteableBitmap wbmi, System.Windows.Media.Color color)
    {
        for (int pixel = 0; pixel < wbmi.Pixels.Length; pixel++)
        {
            if (wbmi.Pixels[pixel] != 0)
            {
                byte[] colorArray   = BitConverter.GetBytes(wbmi.Pixels[pixel]);
                byte blue           = colorArray[0];
                byte green          = colorArray[1];
                byte red            = colorArray[2];
                byte alpha          = colorArray[3];

                if (alpha > 0)
                {

                    //HERE, I change the color, but keep the alpha
                    //
                    wbmi.Pixels[pixel] = Gui.Colors.ToInt.Get(color,alpha);

                    colorArray  = BitConverter.GetBytes(wbmi.Pixels[pixel]);
                    blue        = colorArray[0];
                    green       = colorArray[1];
                    red         = colorArray[2]; …
Run Code Online (Sandbox Code Playgroud)

c# alpha pixel colors writeablebitmap

4
推荐指数
1
解决办法
5596
查看次数

如何获得图形输入笔压力值?

我正在使用Wacom Bamboo Pen平板电脑,我希望能够在我用C#编写的应用程序中获得笔压值.我怎么做?可能有一个API允许人们在Windows 7上获得笔值吗?

c# api user-input wacom hid

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

检查多线程应用程序中的集合中是否存在元素

我们假设我们有两个线程和一个集合:

ConcurrentDictionary<int, object[]> lists = new ConcurrentDictionary<int, object[]>();
Run Code Online (Sandbox Code Playgroud)

1)一个线程处理集合中的元素,然后从集合中删除元素

foreach(object[] elem in lists.Values)
{
    //do somethind
    lists.TryRemove(key, out vals);
}
Run Code Online (Sandbox Code Playgroud)

2)第二个线程将元素添加到集合中,然后它需要能够检查元素状态:

lists.Add(10, some_object);

...

if(lists.ContainsKey(10))
{

    //How can I be sure that at this moment element is still exists ?
    //Thread may be preempted after if() {} and second thread 
    //can remove object from collection
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading

4
推荐指数
1
解决办法
155
查看次数

如何获取具有某些属性的所有属性?

我刚刚开始使用Roslyn,我想找到所有使用属性名称"OneToOne"注释的属性.我启动了SyntaxVisualizer,并且能够获得对该节点的引用,但我想知道是否有更简单的方法来实现这一点.这就是我所拥有的:

var prop = document.GetSyntaxRoot()
             .DescendantNodes()
             .OfType<PropertyDeclarationSyntax>()
             .Where(p => p.DescendantNodes()
                 .OfType<AttributeSyntax>()
                 .Any(a => a.DescendantNodes()
                     .OfType<IdentifierNameSyntax>()
                     .Any(i => i.DescendantTokens()
                         .Any(dt => dt.Kind == SyntaxKind.IdentifierToken
                                 && dt.ValueText == "OneToOne"))))
Run Code Online (Sandbox Code Playgroud)

c# roslyn

4
推荐指数
1
解决办法
2141
查看次数

具有大量控件的假滚动容器

我正在尝试优化 FlowLayoutPanel 的填充和滚动,但我之前遇到过类似控件的问题,如果它们内部有太多控件,则容器需要很长时间才能填充并准备使用(并且滚动条变得越来越短,您可能对此很熟悉)。

我读过,您可以使用容器矩形可见边界内的控件池,并通过用相应的内容重新填充它们来模拟滚动,就好像它们没有这种优化一样。所以你像往常一样滚动,但人口并不需要那么长的时间。但对于一般情况我该如何实现呢?

我正在使用自定义控件来填充 FlowLayoutPanel 容器,因此我正在寻找一个足够通用的解决方案,可以应用于我的控件和标准 .Net 控件。

c# optimization controls winforms

4
推荐指数
1
解决办法
1850
查看次数

仅从DataGridView的特定列获取文本

我有一个DataGridView,其中填充了4列和多行数据.我想遍历DataGridView并仅从特定列获取单元格值,因为我需要将此数据传递给方法.

这是我的代码:

foreach (DataGridViewRow row in this.dataGridView2.Rows)
{                            
    foreach (DataGridViewCell cell in row.Cells)
    {
        if (cell.Value == null || cell.Value.Equals(""))
        {
            continue;
        }

        GetQuestions(cell.Value.ToString());  
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎只是通过所有单元格,但我需要能够指定类似的东西:

foreach (DataGridViewRow row in this.dataGridView2.Rows)
{                            
    foreach (DataGridViewCell cell in row.Cells[2])//Note specified column index
    {
        if (cell.Value == null || cell.Value.Equals(""))
        {
            continue;
        }
        GetQuestions(cell.Value.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# datagridview cell

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

在不使用不安全的情况下将int分配给struct对象

我在c#中有一个struct定义,如下所示

public struct test                                                                                  
{
    byte   SetCommonPOP;
    byte   SetCommonSVP;
    byte   SetCommonUHDP;
    byte   SetCommonMHDP;
};
Run Code Online (Sandbox Code Playgroud)

如何在不使用不安全的情况下将int y分配给此结构的对象x?

c# unsafe structure

3
推荐指数
1
解决办法
138
查看次数