使用字符串插值,如何处理通过管道输入包含空格的命令的变量?例如,如果您有一个包含空格的变量(如UNC路径),您如何处理?
当" filePath"中没有空格时,此代码有效。变量(即; \ ServerName \ testfile.txt):
Ex:System.Diagnostics.Process.Start(" net.exe",$"使用X:\\ {filePath} {pwd / USER:{usr}") .WaitForExit();
但是,只要遇到包含空格的路径,上面的命令就不再有效,因为它无法找到路径。通常,我会在包含空格的路径周围应用引号来对抗此问题(在PowerShell等其他语言中)。你如何用C#插值做类似的事情。
答案 0 :(得分:3)
C#6.0 +:
package main
import (
"fmt"
"unsafe"
)
func main() {
nums := []uint8{1, 2, 3, 4, 5, 6, 7, 8}
val := &nums[0] // val is the equivalent of the *uint8 the Data function returns
ptr := unsafe.Pointer(val)
sixthVal := (*uint8)(unsafe.Pointer(uintptr(ptr) + 5*unsafe.Sizeof(*val)))
fmt.Println("Sixth element:", *sixthVal)
}
C#< 6.0:
System.Diagnostics.Process.Start("net.exe", @$"use X: \\Servername\share {pwd} /USER:{usr}").WaitForExit();
答案 1 :(得分:1)
使用$
void Main()
{
string pwd = "test";
var myVar = $"This is a {pwd}";
var folder = "MyFolder";
var myVarWithPaths = $"C:\\{folder}";
Console.WriteLine(myVar);
Console.WriteLine(myVarWithPaths);
}
输出
这是一个测试
C:\ MyFolder文件
答案 2 :(得分:1)
C#6.0引入了字符串插值,它通过在带引号的文本字符串前加$
字符来使用。
e.g。
var i = 0;
var s = $"i = {i}";
// output: i = 0
您还可以嵌入多个插值字符串以及条件。
var i = 0;
var s = $"i is: {(i == 1 ? $"i is {1}" : "i is not 1")}";
这可以与前缀为@
的字符串文字结合使用。
var i = 1;
var s = @$"c:\{i}\test";
基本上,您可以在插值字符串中编写几乎任何正常expression statement
,例如调用方法:
var s = $"i is {GetValueOfI() - 100}";
对于不是System.String
的类型,该类型ToString()
方法的实现将用于结果值。
请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated