我正在尝试使用整数,字符串和布尔数据类型的数组作为值创建一个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) 在我的游戏中,有很多东西被检查,并且索引经常超出界限,如果有时候没有绘制或检查的话,通常都可以.目前我的代码很容易阅读,但是在调试时,由于记录的异常,游戏会丢失一两帧.虽然它在VS之外工作正常.当我试图避免使用大量if
语句的异常情况时,它大大降低了代码可读性并消除了低fps丢失.我想知道它是否有任何其他影响.
XNA有Spritefont类,它有一个MeasureString方法,可以返回a的宽度和高度string
.我试图了解如何创建一个方法,该方法将有效地返回Environment.Newline
插入在正确位置的字符串,以便如果适合某个宽度和高度(Rectangle用作参数).
我正在开发一个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) 我正在使用Wacom Bamboo Pen平板电脑,我希望能够在我用C#编写的应用程序中获得笔压值.我怎么做?可能有一个API允许人们在Windows 7上获得笔值吗?
我们假设我们有两个线程和一个集合:
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) 我刚刚开始使用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) 我正在尝试优化 FlowLayoutPanel 的填充和滚动,但我之前遇到过类似控件的问题,如果它们内部有太多控件,则容器需要很长时间才能填充并准备使用(并且滚动条变得越来越短,您可能对此很熟悉)。
我读过,您可以使用容器矩形可见边界内的控件池,并通过用相应的内容重新填充它们来模拟滚动,就好像它们没有这种优化一样。所以你像往常一样滚动,但人口并不需要那么长的时间。但对于一般情况我该如何实现呢?
我正在使用自定义控件来填充 FlowLayoutPanel 容器,因此我正在寻找一个足够通用的解决方案,可以应用于我的控件和标准 .Net 控件。
我有一个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#中有一个struct定义,如下所示
public struct test
{
byte SetCommonPOP;
byte SetCommonSVP;
byte SetCommonUHDP;
byte SetCommonMHDP;
};
Run Code Online (Sandbox Code Playgroud)
如何在不使用不安全的情况下将int y分配给此结构的对象x?
c# ×10
alpha ×1
api ×1
arrays ×1
cell ×1
colors ×1
controls ×1
datagridview ×1
dictionary ×1
exception ×1
hid ×1
optimization ×1
pixel ×1
roslyn ×1
spritefont ×1
structure ×1
try-catch ×1
unsafe ×1
user-input ×1
wacom ×1
winforms ×1
word-wrap ×1
xna ×1