我在Windows机器上运行的批处理文件(.bat)中有一系列行,例如:
start /b prog.exe cmdparam1 cmdparam2 > test1.txt
start /b prog.exe cmdparam1 cmdparam2 > test2.txt
Run Code Online (Sandbox Code Playgroud)
有时proj.exe不返回任何内容(空)而不是有用的数据.在那些情况下,我想不生成文本文件,这在批处理文件方面是否容易实现?当前的行为是始终创建文本文件,在空输出的情况下,它只是一个空白文件.
我有一个List<string> AllowedList和一个Dictionary<string,List<string>> MyDictionary.
对于字典中的每个键,我想检查它是否在AllowedList,如果不是我想从字典中删除键和值.
我直觉地尝试了这个似乎是我想要的东西:
foreach (string key in MyDictionary.Keys)
{
if (!AllowedList.Contains(key)) MyDictionary.Remove(key);
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了一个InvalidOperationException:
收集被修改; 枚举操作可能无法执行.
我相信这可能是一个简单的方法,但我没有立即看到它.
不寻找使用框架XXX答案
这个问题不是为了通过框架找到实际的解决方案.回答使用框架XXX,或者这在框架XXX中是如此简单,或者为什么不使用这个框架XXX ??? 不回答这个问题.
我有一个函数意味着在页面加载后运行:performShim.此函数迭代DOM中作为span标记的所有元素,检查它们是否具有className,shim如果是,则调用shim传递给匹配元素的引用.
我的目标是在前面加上另一个span包含一个iframe以传递的元素shim.
到目前为止我写的代码,我能够附加到元素的父级就好了.但是,如果我注释掉该append行并改为尝试前置行,则浏览器可能会挂起无限循环.
对我来说,为什么会出现这种情况并不容易.
function shim( element ) {
var iframe = document.createElement('iframe');
iframe.setAttribute( 'frameborder', '0' );
iframe.setAttribute( 'scrolling', 'no' );
iframe.setAttribute( 'align', 'bottom' );
iframe.setAttribute( 'marginheight', '0' );
iframe.setAttribute( 'marginwidth', '0' );
iframe.setAttribute( 'src', "javascript:'';" );
var span = document.createElement('span');
span.appendChild(iframe);
//element.parentNode.insertBefore(span,element); //causes infinite loop?
element.parentNode.appendChild(span); //this line …Run Code Online (Sandbox Code Playgroud) 在PHP中,我从URI中提取大量JSON数据,然后通过内置json_decode函数将其序列化为关联的PHP数组.
然后,我创建一个数组:
$inserts = array();
Run Code Online (Sandbox Code Playgroud)
我遍历JSON关联数组,为我的$inserts数组中的JSON数组中的每个项添加一个新的键/值对:
foreach($JSON_data as $key => $value) {
$inserts[] = "(".mysql_real_escape_string($value["prop1"]).","
.mysql_real_escape_string($value["prop2"]).","
.mysql_real_escape_string($value["prop3"]).")";
}
Run Code Online (Sandbox Code Playgroud)
然后,我只是通过插入我已经准备好的插入来执行批量插入:
mysql_query("INSERT INTO `MyTable` (`col1`,`col2`,`col3`) VALUES ".implode(",",$inserts));
Run Code Online (Sandbox Code Playgroud)
无论如何,我发现mysql_*不再建议使用这个家庭.所以我想知道如何使用预先准备好的语句或者新接受的结构来完成这种类型的模式?我担心的是消除SQL注入,并且尽可能快地更新MySQL,只需少于10个并发的开放连接(最好是1).此外,尽可能简单快捷.
或者,如果有新模式或首选方法来执行此类批量事务.
如果我触发了多个异步Web请求,将结果附加到全局变量(例如StringBuilder?)是否安全?我知道订单不能保证。
这会导致很多任务阻塞吗?
这样安全吗?
private static StringBuilder sb = new StringBuilder();
private static async Task AccessTheWebAsync()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(@"http://www.google.com/");
sb.Append(response.StatusCode).Append(Environment.NewLine);
}
static void Main(string[] args)
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
tasks.Add(AccessTheWebAsync());
Task.WaitAll(tasks.ToArray());
Console.Write(sb.ToString());
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud) 我想在Javascript中创建一个关联数组,其中我将有一堆指向Image对象的字符串键.原因是我想要预先加载并动态控制大量图像,而不会用数百个全局变量污染全局空间.例如,要避免以下情况:
var img1, img2, img3, ... , img99;
img1 = img2 = img3 = ... = img99 = new Image();
Run Code Online (Sandbox Code Playgroud)
相反,我只想通过一些可识别的字符串名称来调用图像,以使代码更易于阅读,并且_images在全局空间中只有一个变量.
起初,我试图使用an Array来执行此任务,但却发现没有用于指定Array带字符串键的实例化的语法.进一步的调查使我在这里,甚至可以说,Array用作关联阵列可能是有害的.
以前,我曾假定的Javascript阵列类似于LUA表,其中有一个索引部分(其大小被保持在length属性)和散列部分(字符串索引).显然,事实并非如此.相反,在指定"字符串键"时,它实际上只是指定对象属性的简写.
因此,我终于走上了这条道路:
var _images = {
"button_mouseover": new Image(),
"button_mouseout": new Image(),
"button_mousedown": new Image(),
"button_mouseup": new Image()
}
Run Code Online (Sandbox Code Playgroud)
其中我创建了一个对象(其引用存储在其中_images),其中包含一系列属性,每个属性都存储对实例化Image对象的引用.
现在填充src所有图像的属性,至少可以说是相当冗长:
_images["button_mouseover"].src = "fsfs.gif";
_images["button_mouseout"].src = "gsgs.gif";
_images["button_mousedown"].src …Run Code Online (Sandbox Code Playgroud) 如何动态更改<script> src属性Page_Load?
当我说动态时,我的意思是它是同一页面Default.aspx,但每个刷新不同的js源都被引用.js选择哪个文件背后的逻辑无关紧要,仅仅是设置它的机制.
我试过了:
<script id="script1" runat="server" language="javascript" src="a.js" type="text/javascript"></script>
但是script1不在.cs旁边.我知道我可以.aspx通过使用<% %>标签来改变它,但我不希望我的逻辑嵌入我的.aspx.必须有一个办法做到这一点在.cs中端Page_Load?
我有一个接受List<int>被叫的方法DoWork.我有一个巨大的 List<int> Ids.我将巨大的列表分成4个子列表:
List<List<int>> t = (List<List<int>>)SplitColumn<int>(Ids);
Run Code Online (Sandbox Code Playgroud)
(SplitColumn稍微修改了将列表拆分为子列表的答案).
我暂停了程序并t使用调试器进行了检查,它是按照我的预期完全划分的四个列表.
然后,我正在尝试做的是生成四个线程(每个子列表一个).我遇到麻烦的部分是通过四个列表.我遇到了问题,我不确定这里发生了什么:
List<Thread> threads = new List<Thread>();
for(int i = 0; i < t.Count; i++)
{
threads.Add(new Thread(() => DoWork(t[i])));
}
foreach (Thread thread in threads)
{
thread.Start();
}
foreach (Thread thread in threads)
{
thread.Join();
}
Run Code Online (Sandbox Code Playgroud) 所以我写了一个快速的async方法来DataTable从Oracle数据库中获取一些数据.我怎么想在MainWindow()不阻止UI线程的情况下调用它?在async/ wait模型并没有真正太大的意义存在.
async Task<DataTable> AccessOracleAsync()
{
DataTable dt;
using(OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString))
using (OracleCommand cmd = new OracleCommand(@"SELECT * FROM myTbl", conn))
{
await conn.OpenAsync();
using (var reader = await cmd.ExecuteReaderAsync())
{
dt = new DataTable();
dt.Load(reader);
}
}
return dt;
}
Run Code Online (Sandbox Code Playgroud) 假设您有一个冗长,复杂的查询来获取需要一些参数的结果.任何人都会这样做,但为了一个例子:
SELECT
q.PROD_ID, q.NAME, q.STANDARD_PROD, q.DESCRIPTION, q.PART_NUMBER,
q.COMMENTS, q.DESCRIPTION_URL,
PROD_CATEGORY.DESCRIPTION AS CATEGORY_DESCRIPTION,
PROD_TYPES.DESCRIPTION AS PROD_TYPE
FROM
(SELECT
PROD.PROD_ID,
PROD.PROD_TYPE_ID,
PROD.NAME,
PROD.STANDARD_PROD,
PROD.PROD_CATEGORY_ID,
PROD.DESCRIPTION,
PROD.PART_NUMBER,
PROD.COMMENTS,
PROD.DESCRIPTION_URL
FROM
(SELECT
PROD_ID,
PROD_TYPE_ID
FROM
XREF_PRODSYS
WHERE
(PROD_TYPE_ID = (SELECT
PROD_TYPE_ID
FROM
PROD_TYPES
WHERE
(NAME LIKE @prod_type_name)))) AS p
LEFT OUTER JOIN PROD ON p.PROD_ID = PROD.PROD_ID
WHERE
(PROD.NAME LIKE @prod_name)
AND (PROD.HIDDEN = 0)) AS q
LEFT OUTER JOIN PROD_CATEGORY ON q.PROD_CATEGORY_ID = PROD_CATEGORY.PROD_CATEGORY_ID
LEFT OUTER JOIN PROD_TYPES ON q.PROD_TYPE_ID = PROD_TYPES.PROD_TYPE_ID
Run Code Online (Sandbox Code Playgroud)
此特定查询需要两个参数,可能通过GET/POST传递给.NET …
我得到了一些JSON数据,其中最简单的例子是:
{ max: [[Date.UTC(2013,1,22,13,11,13), 999.0000]] }
Run Code Online (Sandbox Code Playgroud)
它看起来很好:
>>> console.log({ max: [[Date.UTC(2013,1,22,13,11,13), 999.0000]] })
Object { max=[1]}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试:
>>> $.parseJSON("{ max: [[Date.UTC(2013,1,22,13,11,13), 999.0000]] }");
SyntaxError: JSON.parse: expected property name or '}'
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
谢谢大家,我没有意识到JavaScript Object Notation和Strict JSON之间的区别.我将其更改为输出如下:
{ "max": [[1353007547000,70.0000]] }
Run Code Online (Sandbox Code Playgroud)
此数据的上下文是通过ajax加载一些HighCharts数据,但所有示例都采用上述格式,而不是ajax.
我在另一个答案中找到了这个类.在.NET中管理单独(单个)线程上的任务队列的最佳方法.
我想尝试一下,但语法对我来说有点奇怪.试图启动一个返回单个int的虚拟任务.我无法编译,不知道语法问题是什么.
m_TaskQueue.Enqueue<int>(
() => { return 1; }
);
Run Code Online (Sandbox Code Playgroud)
编译错误:
无法将lambda表达式转换为委托类型,
System.Func<System.Threading.Tasks.Task<int>>因为块中的某些返回类型不能隐式转换为委托返回类型
来自其他答案的课程:
public class TaskQueue
{
private SemaphoreSlim semaphore;
public TaskQueue()
{
semaphore = new SemaphoreSlim(1);
}
public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
{
await semaphore.WaitAsync();
try
{
return await taskGenerator();
}
finally
{
semaphore.Release();
}
}
public async Task Enqueue(Func<Task> taskGenerator)
{
await semaphore.WaitAsync();
try
{
await taskGenerator();
}
finally
{
semaphore.Release();
}
}
}
Run Code Online (Sandbox Code Playgroud) c# ×6
javascript ×3
.net-4.0 ×2
async-await ×2
.net ×1
.net-4.5 ×1
arrays ×1
asp.net-4.0 ×1
batch-file ×1
c#-4.0 ×1
dictionary ×1
dom ×1
dos ×1
jquery ×1
jquery-1.9 ×1
json ×1
mysql ×1
object ×1
php ×1
windows-7 ×1
wpf ×1
xaml ×1