我已经过了一段时间,靠着墙头撞了一会儿,现在搜索各种短语和关键词,但我找不到任何接近答案的内容,所以我希望有人在这里可以解决一些问题.
基本上我正在深入研究在C#4.0中操纵,创建和修改表达式树
我遇到了一个奇怪的异常,我无法理解
如果我写这样的东西
Expression<Func<string,string>> InsertAString = (Insert) => "This " + (Insert == "" ? "" : Insert + " ") + "That";
Run Code Online (Sandbox Code Playgroud)
当我得到调试并查看表达式树时,它看起来与此类似
我可以打电话
Console.WriteLine(InsertAString.Compile()("Is Something In-between"));
Run Code Online (Sandbox Code Playgroud)
我按照我的期望离开了
"这是介于两者之间的事情"
现在,如果我尝试使用Expression基类的静态方法手动重建,我遇到了一个有趣的问题.(为了调试目的,我已将每一步分解为自己的Expression)
ParameterExpression Insert = Expression.Parameter(typeof(object), "Insert");
ConstantExpression This = Expression.Constant("This ");
ConstantExpression …Run Code Online (Sandbox Code Playgroud) 在VarTypeMSDN Microsoft文档中,VarType它说VBScript的功能(大胆强调):
"备注VarType函数永远不会返回Array的值.它总是被添加到一些其他值以指示特定类型的数组.Variant的值只有在已添加到Array的值时才返回VarType函数的参数是一个数组.例如,为整数数组返回的值计算为2 + 8192或8194.如果一个对象有一个默认属性,VarType(object)返回它的默认类型属性."
但
代码如
Dim A,I1, I2, I3
I1 = 1
I2 = 2
I3 = 3
A = Array(I1,I2,I3)
Dim A2
A2 = Split("Test,Test,Test",",")
AT = VarType(A)
AT2 = VarType(A2)
IT1 = VarType(I1)
IT2 = VarType(I2)
IT3 = VarType(I3)
WScript.Echo IT1
WScript.Echo IT2
WScript.Echo IT3
WScript.Echo AT & " - 8192 = " & AT - 8192
WScript.Echo AT2 & " - 8192 = " & AT2 - 8192
WScript.Echo …Run Code Online (Sandbox Code Playgroud) 当我FileInfo通过调用获取对象时,我注意到 PS ISE 和 PS 中的行为非常奇怪
$FileInfo = [System.IO.FileInfo](".\SomeFile.ext")
Run Code Online (Sandbox Code Playgroud)
当我查看它的属性DirectoryName及其相关属性时,它们都默认为 PS 打开的原始路径。
这是我的 ISE 的副本,它以管理员身份启动,并c:\Windows\System32作为默认路径
如果我运行以下代码:
$Fileinfo = [System.IO.FileInfo](".\@OpenWithToastLogo.png")
cd c:\temp
$Fileinfo2 = [System.IO.FileInfo](".\activation.txt")
z:
$Fileinfo3 = [System.IO.FileInfo](".\7za.exe")
$Fileinfo | fl *
$Fileinfo2 | fl *
$Fileinfo3 | fl *
Run Code Online (Sandbox Code Playgroud)
我明白了
版本信息 :
文件 : C:\WINDOWS\system32\@OpenWithToastLogo.png
内部名称 :
OriginalFilename :
FileVersion :
FileDescription :
产品 :
ProductVersion :
调试 : False
修补 : False
PreRelease : False
PrivateBuild : False
SpecialBuild : False
语言 …