小编Tof*_*Bug的帖子

为什么我不能手动创建与我的直线lambda相同的表达式树

我已经过了一段时间,靠着墙头撞了一会儿,现在搜索各种短语和关键词,但我找不到任何接近答案的内容,所以我希望有人在这里可以解决一些问题.

基本上我正在深入研究在C#4.0中操纵,创建和修改表达式树

我遇到了一个奇怪的异常,我无法理解

如果我写这样的东西

Expression<Func<string,string>> InsertAString = (Insert) => "This " + (Insert == "" ? "" : Insert + " ") + "That";
Run Code Online (Sandbox Code Playgroud)

当我得到调试并查看表达式树时,它看起来与此类似

  • F(NodeType = Lambda)
    • 正文(NodeType = Add)
      • 左(NodeType = Add)
        • 左(NodeType =常量,值="此")
        • 对(NodeType =条件)
          • IfFalse(NodeType = Add)
            • 左(NodeType =参数,名称="插入")
            • 右(NodeType =常量,值="")
          • IfTrue(NodeType = Constant,Value ="")
          • 测试(NodeType = Equal)
            • 左(NodeType =参数,名称="插入")
            • 右(NodeType =常量,值="")
      • 右(NodeType =常数,值="那")
    • 参数(计数= 1)
      • 参数[0](NodeType =参数,名称="插入")

我可以打电话

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)

c# lambda expression-trees

8
推荐指数
1
解决办法
1548
查看次数

为什么VarType()总是为数组返回8204

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)

arrays vbscript

8
推荐指数
1
解决办法
8833
查看次数

在 PowerShell 中,为什么“转换”到 FileInfo 设置错误的 FullName、Directory 和 DirectoryName

当我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
语言 …

powershell powershell-4.0

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