小编Cri*_*ole的帖子

Go类型开关中的代码复制

刚刚开始编写Go代码,我遇到了一个有趣的问题.

有没有办法轻松迭代数组中的项目,这些项目作为空接口引入而没有代码重复?考虑以下:

function(someArr interface{}){
  switch someArr.(type){
    case []int :
        arr := (someArr).([]int)
        for i := range (arr) {
          // CODE
        }

    case []string :
        arr := (someArr).([]string)
        for i := range (arr) {
          // CODE
        }
  } 
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,CODE中的代码完全相同.但是,我无法将其从交换机中取出,因为类型断言arr将超出范围.同样,我无法在切换之前定义arr,因为我不知道它将是什么类型.这可能无法完成.在那种情况下,当我用一个不规则的模式(某些数组的int,某些数组或字符串)解析JSON时,对于这种事情有什么更好的习惯用法?

go

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

如何在ADO.NET中安全地创建查询,其中选择的表更改?

在ADO.NET中,您可以向命令对象添加参数,以将用户输入安全地添加到SQL查询中.SQL查询常见的其他谓词的等价物是什么?

我正在编写一个程序,它本质上是一个非常有限的OR映射器和SQL生成器(它主要关注具有元信息的数据库和符合该元数据的其他数据库).因此,我需要能够调用以下内容:

string sql = "select " + USER_SELECTED_COLUMNS + 
            " from " + USER_SELECTED_TABLE + 
            " where " + USER_CRITERIA;
Run Code Online (Sandbox Code Playgroud)

其中一些(如criteria)可信用户(我公司的其他开发人员)输入我的程序,而其他数据由不信任的用户(客户)通过他们的搜索等输入我的程序.

我想让这个程序安全,我知道上面的内容不是.目前我已经USER_SELECTED_COLUMNS用命令参数替换了,但是我无法找到CRITERIA和TABLEs的等价物.(或按订单列).是否有任何类似于SqlParameter我可以用于非选择谓词的ADO.NET功能?

c# sql ado.net sql-injection database-security

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

任务似乎自动启动

我正在移植一个具有非常长的加载时间的程序,当我移植它时根本没有改进,因为缓慢是因为访问数据库服务器(而不是次优代码).我已经将加载移动到与Tasks库的单独线程上,现在UI在加载时不会冻结,但它确实让我对某些东西感到好奇:

该Task.Factory对象有一个方法StartNew,该方法应该创建一个新任务,启动它并返回对它的引用.这是有道理的,但似乎Task构造函数完全相同.

当我执行以下操作时:

Task catsFromDB = new Task(() => AddCategoriesFromDB(cts.Token), cts.Token);
catsFromDB.Start();
Run Code Online (Sandbox Code Playgroud)

我得到一个InvalidOperationException我真的不明白的错误.它似乎相信我已经把它踢掉了.我还没有.

[编辑]

erorr是:"InvalidOperationException,可能无法在已完成的任务上调用Start"

[编辑]

错误是我包含的一些取消代码.我需要在尝试再次运行之前重置取消.

.net c# task-parallel-library

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

如果模板系统中的语句

我如何在我自己的模板类版本中解析,{if $var > 2}或者说{if $var}在.tpl文件中.我不想使用smarty,因为我不需要他们所有的插件.我只想要包含,if,for和foreachstatement.

php templates templating templating-engine

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

String.Join和String.Split参数助记符

我每次都会使用C#的String.Join和String.Split参数类型.问题是String.Split需要一个params char[]字符数组并且String.Join需要一个string.

有没有人有一个很好的助记符,可以帮助我记住哪些需要,所以我没有必要修复这一次我做一个字符串操作?

[编辑,因为每个人似乎都很困惑为什么我没有IDE支持]

当我大部分时间使用时,我正在使用LinqPad,就像这样:

String.Join("\n", @"LongRawString
WithPlentyOfLines
UsuallyGeneratedBySomeoneElse
OrProducedBySqlServerForExample".Split('\n').Select(x => 
    {
        x = x.Trim();

        //create line of code, like:
        return "int longRawStringIdx = reader.GetOrdinal(\"LongRawString\")";
    }))
Run Code Online (Sandbox Code Playgroud)

我没有在LinqPad中获得IDE支持,并希望节省我每次返回并修复它所需的几秒钟.这很愚蠢,但是我们程序员编写的脚本只有一半可以自动执行我们每天执行的12秒任务.

问题是我搞砸了我是否我应该是给Split了string或Join将string作为第一个参数(或仅在的情况下Split).

c# string mnemonics

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

暂停Python生成器

我有一个python生成器,它可以生成大量数据,占用大量内存.有没有办法检测处理过的数据是否已被使用生成器的代码"消耗",如果是,请暂停直到它被消耗?

def multi_grab(urls,proxy=None,ref=None,xpath=False,compress=True,delay=10,pool_size=50,retries=1,http_obj=None):
    if proxy is not None:
        proxy = web.ProxyManager(proxy,delay=delay)
        pool_size = len(pool_size.records)
    work_pool = pool.Pool(pool_size)
    partial_grab = partial(grab,proxy=proxy,post=None,ref=ref,xpath=xpath,compress=compress,include_url=True,retries=retries,http_obj=http_obj)
    for result in work_pool.imap_unordered(partial_grab,urls):
        if result:
            yield result
Run Code Online (Sandbox Code Playgroud)

逃离:

if __name__ == '__main__':
    links = set(link for link in grab('http://www.reddit.com',xpath=True).xpath('//a/@href') if link.startswith('http') and 'reddit' not in link)
    print '%s links' % len(links)
    counter = 1
    for url, data in multi_grab(links,pool_size=10):
        print 'got', url, counter, len(data)
        counter += 1
Run Code Online (Sandbox Code Playgroud)

python generator

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

无法将模型添加到主干集合

我有一个具有一堆属性的模型,但这里有两个感兴趣的id和key.key永远是独一无二的,id而不是那么多.当我尝试向id集合中添加多个具有相同模型的模型时,我收到此错误:

Uncaught Error: Can't add the same model to a collection twice
Run Code Online (Sandbox Code Playgroud)

我猜这是因为骨干正在使用它id来决定两个模型是否存在===.那是对的吗?如果有,有没有办法覆盖这种行为,而无需交换id和key属性的名称?我尝试搞乱这个系列,comparator但无济于事......

javascript collections equals backbone.js

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

使用生成器表达式后出现意外结果

我正在尝试过滤我正在使用的一些数据,以便在我的测量设备中取出一些伪像,例如负数和错误.我一直在玩使用发电机这样做的想法.我使用的是Python 2.7.2

testlist = [12,2,1,1,1,0,-3,-3,-1]  

gen = (i for i, x in enumerate(testlist) if x < 0 or x > 2.5)

for i in gen: testlist.pop(i)

print testlist
Run Code Online (Sandbox Code Playgroud)

返回:

[2, 1, 1, 1, 0, -3]
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么-3值出现在更新的"测试列表"中?

python

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

如何编写更复杂的LINQ查询

假设我有:

public class Cluster
{
   List<Host>  HostList = new List<Host>();
}
public class Host
{
   List<VDisk> VDiskList = new List<VDisk>();
} 

public class VDisk
{
   public string Name {get; set}
}
Run Code Online (Sandbox Code Playgroud)

我需要具有给定名称的VDisk的Cluster对象中的所有主机.我可以用foreach做,但宁愿有LINQ查询.我尝试了一个SelectMany(),但它返回VDisk而不是Hosts.我是否需要实现自定义Comparer才能执行此操作?

这是我试过的:

Cluster CurrentCluster = new Cluster();

// add some hosts here

VDisk vdisk = new VDisk();
vdisk.Name="foo";
Run Code Online (Sandbox Code Playgroud)

所以现在我想要所有拥有名为"foo"的虚拟磁盘的主机

这将返回虚拟磁盘,而不是主机:

CurrentCluster.Hosts.SelectMany(h => h.VDisks.Where(v => v.Name == vdisk.Name));
Run Code Online (Sandbox Code Playgroud)

c# linq

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

从ngResource中抑制方法

ngResource 在RESTful(或至少是REST启发的)Api中管理数据访问看起来非常方便...但我想用它管理的一些数据是只读的(至少从我的应用程序的角度来看).

有没有办法阻止ngResource添加保存,删除和删除方法返回的对象?就文档而言,它看起来像是一个唯一的附加API ...

angularjs ngresource

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