我有
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) 我有两个有父子关系的类(客户和订单目录及文件等)
我有
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永远不会死,因为它拥有对自身的引用
可能重复:
我们应该怎样做才能为2038做准备?
我不是说抽象的"人".我的意思是你在做什么,如果有的话是什么?
我是一名古老的程序员,回想起70年代后期我写COBOL时,我的团队中的其他人说"你知道 - 这在2000年不会起作用".回答是"是的但是这个系统到那时候才会被使用,那是25年之后".
2038年距今已有28年.
我问这个是因为我一直在追逐SL4中的共同/逆转问题.我在SO中问了两次并得到了答案 - "它只是有效,确保你使用.net 4".我在SL4和.Net 4中尝试了我的失败代码(以及人们发布的样本),结果不同(在.net中工作失败).所以SL4实际上是在<4版本上运行.或者只是遗漏了一些功能(意外或故意).如果有什么功能
SL 5怎么样?
我正在对各种类型的集合操作进行比较.
所以我有一个泛型类
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)
这是怎么回事?
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) 这真是一个更基本的成语问题,但这是一个很好的例子.(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),但都无济于事.
我如何知道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没有抱怨任何东西.
提前致谢.
假设我有一个 ID 列表,获取一堆文档的“最佳”方法是什么
我知道我可以尝试各种方法,但在小范围内可能所有选项都具有相似的性能。到目前为止,我什么都没试过——只是阅读文档
也许没有“最佳”方法,但是各种方法(速度、成本、总体吞吐量……)之间的权衡是什么?
叹息 - 我知道这会被否决 - 沿着“你尝试过什么”,“我们不会为你编写代码”等的路线。我无法进行有意义的性能分析,直到我有数千个并行请求同时出现在 TB 级数据。我发誓我不是懒惰或不愿意投入工作,只是不想进入生产并发现我有性能问题然后被告知“你到底为什么这样做?”
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)