我有一个从服务器返回的JSON流,我需要使用JSON.net搜索节点"ID"的特定值来解析数据.我几乎可以使它工作,但不完全是因为返回的结果彼此深深地嵌套 - 这是因为我正在获得一个文件夹结构.我把JSON简化为更简单的版本.我明白了:
{
"data": {
"id": 0,
"name": "",
"childFolders": [{
"id": 19002,
"name": "Locker",
"childFolders": [{
"id": 19003,
"name": "Folder1",
"childFolders": [],
"childComponents": [{
"id": 19005,
"name": "route1",
"state": "STOPPED",
"type": "ROUTE"
}]
}, {
"id": 19004,
"name": "Folder2",
"childFolders": [],
"childComponents": [{
"id": 19008,
"name": "comm1",
"state": "STOPPED",
"type": "COMMUNICATION_POINT"
}, {
"id": 19006,
"name": "route2",
"state": "STOPPED",
"type": "ROUTE"
}, {
"id": 19007,
"name": "route3",
"state": "STOPPED",
"type": "ROUTE"
}]
}],
"childComponents": []
}],
"childComponents": [] …Run Code Online (Sandbox Code Playgroud) 我确定这个问题已经得到了回答,但经过一个小时的不断搜索,我仍然感到非常困惑.
我正在学习C#并习惯了工作原理,但是让我感到困惑的一件事就是如何让方法中创建的对象可用于其他方法.
我正在开发一个可以完成图像工作的应用程序.我想在表单加载时创建程序使用的对象,然后使用另一种方法对其进行更改.看起来很简单.这是代码的一部分:
private void Form1_Load(object sender, EventArgs e)
{
InitializeBMPObjects();
}
public void InitializeBMPObjects ()
{
Bitmap Bmp1 = new Bitmap(320, 226);
}
public void pushPixels()
{
Graphics g = Graphics.FromImage(Bmp1);
//Do some graphics stuff....
}
Run Code Online (Sandbox Code Playgroud)
我想创建位图对象"Bmp1"然后我希望pushPixels()对该对象进行更改.
麻烦的是,方法pushPixels抱怨因为"名称'Bmp1'在当前上下文中不存在"
我认为这个问题基本上是范围.对象Bmp1仅存在于方法InitializeBMPObjects的范围内.但是如果我想在表单加载上创建一堆对象呢?我应该在方法之外创建对象吗?或者我是否需要以某种方式将这些标记为全局对象?
谢谢.
我一直在撞墙挡在头上.
我知道如果我在Powershell中创建一个数组,然后复制数组,它会将其复制为引用类型而不是值类型.
所以,经典的例子是:
$c = (0,0,0)
$d = $c
$c[0] = 1
$d
1
0
0
Run Code Online (Sandbox Code Playgroud)
解决方案是这样做$d = $c.clone()
虽然数组本身是引用类型的集合,但这不起作用.这是我的问题.我正在尝试通过创建进程数组来创建一个跟踪CPU使用情况的数组,等待一段时间,然后检查最新值并计算差异.但是,Get-Process会创建一个引用数组.所以当我做以下事情时:
$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get current values
$b = $a.clone() #Create a copy of those values.
sleep 20 #Wait a few seconds for general CPU usage...
$a = ps | sort -desc id | where-object {$_.CPU -gt 20} #Get latest values.
$a[0]
$b[0] #returns the same value as A.
Handles NPM(K) …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些帮助理解事件.我一直在阅读关于它们的文章并观看教程视频.
我几乎理解他们,但我一直在遇到障碍.
我自己做了一个简单的WinForms测试应用程序来尝试和学习这个过程.在应用程序中,屏幕周围有2个行走的精灵.单击表单时,它会创建一个下降thwomp的精灵(并且它会创建一个事件),步行者精灵应该通过选择一个远离精灵的新步行路径来对事件做出反应.我想我已经写好了一切,但是当我编译它时我得到了错误:
错误1可访问性不一致:参数类型'eventStomper.RunEventArgs'比委托'eventStomper.RunInFear'更难访问
错误2不可访问性:参数类型'eventStomper.RunEventArgs'比方法'eventStomper.Walker.RunAway(object,eventStomper)更难访问. RunEventArgs)"
我很茫然,因为一切都是公开的.有关错误的任何建议吗?并且,有关事件处理的任何建议吗?
这里的源代码简化为相关位:
namespace eventStomper
{
public delegate void RunInFear(object sender, RunEventArgs re); //The delegate for responding to events.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
spawnWalkers(); //Create a couple of walkers to roam around the form
}
List<Thwomp> thowmpList = new List<Thwomp>(); //List of thwomps. This is iterated through for animation.
List<Walker> walkerList = new List<Walker>();// Same thing with the walkers.
public void pictureBox1_Click(object sender, EventArgs e) //When you click …Run Code Online (Sandbox Code Playgroud) 我一直在研究从数据库中提取大量记录的数据导出程序.其中一个步骤涉及将RTF文本字符串转换为纯文本,这最终导致用户对象在运行时发生内存泄漏.任务管理器将显示的一个列是"USER对象" - 当达到~10,000时,程序将耗尽分配空间,程序将出现"错误创建窗口句柄"
发生这种情况是因为我没有在方法结束时处理我的对象.
我的问题是,为什么C#/.net不为我处理它?
这是一个快速重现漏洞的代码示例.将代码放入Winforms应用程序并按下按钮以使其循环通过内存浪费.
private void wasteMemory()
{
System.Windows.Forms.RichTextBox rtfBox = new System.Windows.Forms.RichTextBox();
//RTF text that reads "Hello World"
rtfBox.Rtf = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Arial;}} {\\colortbl ;\\red0\\green0\\blue0;} \\viewkind4\\uc1\\pard\\cf1\\fs29 Hello World} ";
//If line below is commented out, User Objects grow out of control.
//rtfBox.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 1; i < 100000; i++)
{
wasteMemory();
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,当方法完成时,处理在其侧面创建的任何对象的方法范围.我期望rtfBox被处理掉,但事实并非如此.
我有一个带有一个主窗口的简单.net应用程序.在处理数据之前,我想检查一些单选按钮.我有两套CS文件.Form1.cs(主窗口代码)和database.CS(实际运行数据库查询的代码.)database.cs需要能够从Form1.cs中读取一些设置.
在form1.cs上我有这个:
public string GetWorld
{
get
{
if (this.radioButton_Dev.Checked == true)
{
MessageBox.Show("Returning Dev!");
return "Dev";
}
else if (this.radioButton_Prod.Checked == true)
{
MessageBox.Show("Returning Prod!");
return "Prod";
}
else
{
MessageBox.Show("Returning default!");
return "Dev";
}
}
}
Run Code Online (Sandbox Code Playgroud)
在database.cs我有这个:
public SqlConnection GetConnectionString () {
Form1 MainWindow;
MainWindow = new Form1();
if (MainWindow.GetWorld == "Dev" )
{
SqlConnection Connection = new SqlConnection("Data Source = Dev .... blah blah blah...");
return Connection;
}
else if (MainWindow.GetWorld == "Prod")
{
SqlConnection Connection = …Run Code Online (Sandbox Code Playgroud)