在PowerShell中,如何通过指定对象的名称(字符串)来获取对象的属性值?我想要以下内容:
$obj = get-something
# View the object's members:
$obj | gm
# I could retrieve a property by doing so:
write-host $obj.SomeProp
# But for many purposes, I would really want to:
write-host $obj | Get-PropertyByName "SomeProp"
Run Code Online (Sandbox Code Playgroud)
在PowerShell中有类似"Get-PropertyByName"的东西吗?
如果主事件循环中还有回调,Node.js脚本将不会退出.虽然可以通过调用process.exit()或抛出异常来强制终止脚本,但建议通过始终进行适当的清理来让脚本"自然地"终止.但是,这有时可能很困难,因为代码中的错误可能会阻止正确的清理,例如,我可能忘记在不再需要时删除IntervalObject等,这最终会阻止程序终止.
因此,有没有办法调试非终止脚本以找出事件循环中剩余的内容?换句话说,Node.js中是否有一种方法可以调试阻止程序退出的内容?
我们正在开发WPF中的布局管理器,其具有可由用户移动/调整大小/等的视口.视口通常通过布局管理器中我们控制的提供程序填充数据(图片/电影/等).我的工作是检查它是否也可以在视口中托管任何外部Windows应用程序(即记事本,计算,土坯阅读器等).我遇到了一些问题.
大多数资源都指向使用HwndHost类.我正在试验微软本身的演练:http://msdn.microsoft.com/en-us/library/ms752055.aspx
我已经对此进行了调整,因此列表框将替换为外部应用程序的Windows句柄.任何人都可以帮我解决这些问题:
ListBox放置了该子窗口.我不认为我需要外部应用程序.如果我省略它,我必须使外部应用程序成为子窗口(使用来自user32.dll的Get/SetWindowLong设置GWL_STYLE为WS_CHILD).但是,如果我这样做,应用程序的菜单栏消失(因为WS_CHILD样式),它不再接收输入.HwndHost(因此可以移动到视口外).有什么办法可以阻止吗?HwndHost,但WindowsFormHost作为讨论在这里.它工作(并且更简单!)但我无法控制应用程序的大小?另外,WinFormHost真的不是这个意思吗?感谢您指出正确的方向.
为什么会这样?我真的不明白:
>>> P = [ [()]*3 ]*3
>>> P
[[(), (), ()], [(), (), ()], [(), (), ()]]
>>> P[0][0]=1
>>> P
[[1, (), ()], [1, (), ()], [1, (), ()]]
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个与Python交互式shell的"_"变量相当的功能.在PowerShell中我想要这样的东西:
> Get-Something # this returns an object and display it to the output.
# Now I want to assign that object to some variable
> $anObj = ???
Run Code Online (Sandbox Code Playgroud) 在.NET世界中,当谈到对象序列化时,它通常用于在运行时检查对象的字段和属性.对此作业使用反射通常很慢,并且在处理大量对象时是不合需要的.另一种方法是使用IL发射或构建表达树,这些表现树相对于反射提供显着的性能增益.而后者是处理序列化时最现代化的库.但是,在运行时构建和发送IL需要花费时间,并且只有在将此信息缓存并重用于相同类型的对象时才会回收投资.
当使用Json.NET时,我不清楚使用上述哪种方法,如果确实使用了后者,是否使用了缓存.
例如,当我这样做时:
JsonConvert.SerializeObject(new Foo { value = 1 });
Run Code Online (Sandbox Code Playgroud)
Json.NET是否构建了Foo的成员访问信息并缓存以便以后重用它?
免责声明:我明白之间的差别IEnumerable<T>,并 IEnumerator<T>和如何使用这两种.这与此或此不重复.
这更像是一个设计问题 - 因为IEnumerator<T>已经封装了可以枚举的所有必要信息(.Current,.MoveNext()),那么引入一个type(IEnumerable<T>)的目的是什么呢?它的唯一目的是返回前者的实例?
再具体一点:
为什么不能foreach设计为直接迭代IEnumerator<T>,如下所示:
// foreach (var e in anEnumerator) { //... }
while (anEnumerator.MoveNext())
{
doSomething(anEnumerator.Current);
}
Run Code Online (Sandbox Code Playgroud)为什么不能直接建立Linq IEnumerator<T>?
我刚刚意识到这一点,我已经很难学会了,所以我想分享一下.考虑您有以下字符串列表:
>$list = New-Object -TypeName System.Collections.Generic.List[string]
>$list.Add("x")
>$list.Add("yy")
>$list.Add("zzz")
>$list
x
yy
zzz
Run Code Online (Sandbox Code Playgroud)
现在,如果您想获取列表中的项目数,您将访问.Count属性,它会按预期为您提供"3".
>$list.Count
3
Run Code Online (Sandbox Code Playgroud)
但是,有时候你会通过访问.Length而不是.Count来搞错.在其他语言中,如Python或C#,您会收到一条错误消息,指出此属性不可用.但是在PowerShell中,事实证明,如果在该对象上找不到它,它会遍历包含的对象并访问它们上的属性.所以你最终得到了一个Lengthes列表!惊喜!
>$list.Length
1
2
3
Run Code Online (Sandbox Code Playgroud)
你甚至可以调用方法!
>$list.ToUpper()
X
YY
ZZZ
Run Code Online (Sandbox Code Playgroud)
请注意,正如我所尝试的,此"功能"也适用于System.Collections.ArrayList.但它不适用于PowerShell的内置数组类型.
这个"功能"叫什么?为什么这样设计呢?这非常令人惊讶且容易出错.
Python的日志记录模块允许模块或类定义自己的记录器.不同的记录器可以有不同的处理程序.他们中的一些人可能选择登录文件,而有些人则选择登录,例如stdout.
现在,我的应用程序使用了其中几个模块,每个模块都有自己的记录器,这些记录器具有各种处 我可以统一日志记录行为,以便所有日志都转到我指定的日志文件吗?换句话说,有没有办法从一个地方同时将.config()所有记录器的处理程序?
我有一个C类型的对象列表,其中类型C由属性X,Y,Z组成,例如,cX,cY,cZ
现在我想执行以下任务:
什么是最简洁的方式?