小编pm1*_*100的帖子

如何为函数设置条件参数参数

我有

public void Foo(string name, params object[] args)
Run Code Online (Sandbox Code Playgroud)

我想用一个可以变化的args列表来调用它.我需要做点什么

Foo("yo",a,b,x==42?c);
Run Code Online (Sandbox Code Playgroud)

即如果x是42则传入a,b,c否则传入a,b.当然,这种语法不起作用.我知道我可以将args编组到List并将列表传递给函数,但是这样做组织代码的方式会非常混乱.那么我可以使用一些语法魔法

编辑:让我添加具体案例

var xml = new XDocument(....,
   new XElement(....),
   new XElement(....),
   new XElement(....),
   x==42? new XElement(.....),
   new XElement(....),
   new XElement(....)
   ....
Run Code Online (Sandbox Code Playgroud)

c# params

6
推荐指数
1
解决办法
2805
查看次数

提升shared_ptr和'this'

我有两个有父子关系的类(客户和订单目录及文件等)

我有

typedef boost::shared_ptr<Parent> ParentPtr
Run Code Online (Sandbox Code Playgroud)

在父类中,有一个制作孩子的方法

我需要子实例来指向其父级.

class Child
{
 ....
     ParentPtr m_parent;
 ....
}
Run Code Online (Sandbox Code Playgroud)

我希望它是一个shared_ptr,以便在存在子节点时父节点不会消失.我还有其他人将ParentPtrs保存到父级(Parent的工厂方法返回ParentPtr)

问题:如何给孩子一个ParentPtr

尝试(1).在Parent :: ChildFactory中

child->m_parent.reset(this);
Run Code Online (Sandbox Code Playgroud)

这导致非常糟糕的事情.现在有2个ParentPtr'链'指向父母; 结果是父母过早死亡

尝试(2).父母有

ParentPtr m_me;
Run Code Online (Sandbox Code Playgroud)

这是从父工厂的返回值复制的.所以我能做到

child->m_parent = m_me;
Run Code Online (Sandbox Code Playgroud)

但是现在Parent永远不会死,因为它拥有对自身的引用

c++ boost shared-ptr

5
推荐指数
1
解决办法
820
查看次数

有没有人做任何关于2038 time_t bug的事情?

可能重复:
我们应该怎样做才能为2038做准备?

我不是说抽象的"人".我的意思是你在做什么,如果有的话是什么?

我是一名古老的程序员,回想起70年代后期我写COBOL时,我的团队中的其他人说"你知道 - 这在2000年不会起作用".回答是"是的但是这个系统到那时候才会被使用,那是25年之后".

2038年距今已有28年.

c c++ unix time

5
推荐指数
2
解决办法
1727
查看次数

Silverlight 4的核心CLR是否与"经典".Net 4相同?

我问这个是因为我一直在追逐SL4中的共同/逆转问题.我在SO中问了两次并得到了答案 - "它只是有效,确保你使用.net 4".我在SL4和.Net 4中尝试了我的失败代码(以及人们发布的样本),结果不同(在.net中工作失败).所以SL4实际上是在<4版本上运行.或者只是遗漏了一些功能(意外或故意).如果有什么功能

SL 5怎么样?

silverlight-4.0

5
推荐指数
1
解决办法
134
查看次数

通用函数中的equals()和==

我正在对各种类型的集合操作进行比较.

所以我有一个泛型类

 public class Comparer<T, Tid>
...
     public bool Equals(T x, T y)
       {
          var xid = m_idfunc(x);
           var yid = m_idfunc(y);
           return (Tid)xid == (Tid)yid;
       }
Run Code Online (Sandbox Code Playgroud)

其中m_idfunc是传递给Comparer构造函数的lambda,它是

Func<T,Tid>
Run Code Online (Sandbox Code Playgroud)

我用Tid = string创建了一个比较器.我进入等于函数xid = string1,yid = string2

如果string1和string 2相同("foo"和"foo"说)

xid == yid
Run Code Online (Sandbox Code Playgroud)

产生错误

(Tid)xid == (Tid)yid
Run Code Online (Sandbox Code Playgroud)

也产生错误(它不应该是必要的 - 我只是变得绝望)

继承我的直接窗口 - 暂停返回xid == yid行

yid.GetType() == typeof(string)
true
xid.GetType() == typeof(string)
true
xid==yid
false
(string)xid==(string)yid
true
xid.Equals(yid)
true
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

c# equals

5
推荐指数
1
解决办法
528
查看次数

什么是数据对象可接受的样式python

python中数据对象的普通样式是什么。可以说我有一种方法可以从某个地方(网络,数据库等)获取客户,我应该返回哪种类型的对象。我看到几种选择:

  • 一个元组
  • 一本字典
  • 一个类实例(数据类为“普通”类)

我敢肯定还有其他人。做我的第一个大型python项目,因此想从一开始就使用最佳实践

哇-对这个问题的负面反应感到惊讶。也许不清楚

我有很多要传递给我的代码的不同数据项。用户,产品,客户,订单等(实际上,它们并非如此,而是简单易懂的事物类型)。所以我有

def get_user():
  return x
Run Code Online (Sandbox Code Playgroud)

x应该是什么。类的实例,称为用户,字典,元组...

没有与对象关联的方法,纯数据

似乎namedtuple是要走的路

编辑:如何作为一种样式

class product:
   pass

...

def get_product():
   ... db read stuff
   pr = product()
   pr.name = dbthing[0]
   pr.price = dbthing[1]
   return pr
Run Code Online (Sandbox Code Playgroud)

那是酒吧诱导或成熟的风格,还是奇怪或什么?有用。从消费者的角度来看,它使代码更加可读

def xxx():
  pr = get_product()
  total = amount * pr.price
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
300
查看次数

如何制作unix socket监听器

这真是一个更基本的成语问题,但这是一个很好的例子.(BTW 100%go newb)

尝试监听unix套接字并处理消息.从各个地方偷来的代码,但我不能'把'正确的东西

package main

import "fmt"
import "net"

func main(){
    ln,err := net.Listen("unix", "/var/service/daemon2")
    if err!= nil {
        fmt.Println(err)
        return
    }

    for {
        c, err := ln.Accept()
        if err != nil {
            fmt.Println(err)
            continue
        }
    // handle the connection
        go handleServerConnection(c)
    }


}

func handleServerConnection(c net.UnixConn) {
    // receive the message
    buff := make([]byte, 1024)
    oob := make([]byte, 1024)

    _,_,_,_,err:=c.ReadMsgUnix(buff,oob);
    if err != nil {
        fmt.Println(err)

    }
}
Run Code Online (Sandbox Code Playgroud)

我需要在handleServerConnection中使用'c'为UNixConn类型,以便我可以调用ReadUNixMsg.但是通用的Listen代码构成了一个通用的Conn对象.所以这段代码没有编译.

我尝试了各种转换/转换类型的东西UnixConn(c),但都无济于事.

go

5
推荐指数
1
解决办法
1156
查看次数

我如何知道类是否是非托管资源的包装器

我如何知道C#中的类是否是非托管的,因此如果我在自定义类中使用它,我知道是否必须实现IDisposable接口?

如果我在MSDN网络上得到这篇文章,我总是必须在使用非托管资源时实现IDisposible接口.

所以我创建了一个你可以在下面找到的小例子:

class TestClass
{
    private StreamReader reader;

    public UsingTestClass()
    {
        reader = File.OpenText("C:\\temp\\test.txt");

        string s;
        while (!string.IsNullOrEmpty(s = reader.ReadLine()))
        {
            Console.WriteLine(s);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

以下MSDN文章说,例如,File是一个无人值守的资源,它也在我的测试类中使用.那么我怎么看,这个课程是无人的?编译器和ReSharper没有抱怨任何东西.

提前致谢.

c#

5
推荐指数
1
解决办法
331
查看次数

通过已知 IDS 批量获取的最有效方法

假设我有一个 ID 列表,获取一堆文档的“最佳”方法是什么

我知道我可以尝试各种方法,但在小范围内可能所有选项都具有相似的性能。到目前为止,我什么都没试过——只是阅读文档

也许没有“最佳”方法,但是各种方法(速度、成本、总体吞吐量……)之间的权衡是什么?

叹息 - 我知道这会被否决 - 沿着“你尝试过什么”,“我们不会为你编写代码”等的路线。我无法进行有意义的性能分析,直到我有数千个并行请求同时出现在 TB 级数据。我发誓我不是懒惰或不愿意投入工作,只是不想进入生产并发现我有性能问题然后被告知“你到底为什么这样做?”

azure-cosmosdb

5
推荐指数
1
解决办法
1560
查看次数

sqlite3.g4语法无法正确处理左连接

github sqlite3语法github.com/antlr/grammars-v4/blob/master/sqlite/SQLite.g4存在左连接问题.

对于这个sql

select * from t1 left join t2 on t1.owner = t2.email
Run Code Online (Sandbox Code Playgroud)

"left"这个词被解析为table_alias.事情从那里迅速走下坡路

我想我可以通过某种方式说,解决这个问题table_alias是any_name除K_LEFT,K_RIGHT,K_INNER但我不知道该如何表达,在一个语法

或者也许有更好的方法来解决这个问题

UPDATE.只是为了澄清sqlite的行为.(不是谈论antlr,谈论sqlite理解的内容)

这个

select username from user left join device on device.owner = user.id limit 2
Run Code Online (Sandbox Code Playgroud)

作品.

这个

select username from user alias join device on device.owner = user.id limit 2
Run Code Online (Sandbox Code Playgroud)

没有说列user.id不存在.

显然,"左"这个词被识别为关键字而不是表别名.

select username from user alias join device on device.owner = alias.id limit 2
Run Code Online (Sandbox Code Playgroud)

工作,并进行内部联接

select username from user alias left join device on device.owner = user.id limit …
Run Code Online (Sandbox Code Playgroud)

antlr4

5
推荐指数
1
解决办法
151
查看次数

标签 统计

c# ×3

c++ ×2

antlr4 ×1

azure-cosmosdb ×1

boost ×1

c ×1

equals ×1

go ×1

params ×1

python ×1

shared-ptr ×1

silverlight-4.0 ×1

time ×1

unix ×1