引号内的C#变量

时间:2018-04-21 23:47:45

标签: c#

使用字符串插值,如何处理通过管道输入包含空格的命令的变量?例如,如果您有一个包含空格的变量(如UNC路径),您如何处理?

当" filePath"中没有空格时,此代码有效。变量(即; \ ServerName \ testfile.txt):

Ex:System.Diagnostics.Process.Start(" net.exe",$"使用X:\\ {filePath} {pwd / USER:{usr}") .WaitForExit();

但是,只要遇到包含空格的路径,上面的命令就不再有效,因为它无法找到路径。通常,我会在包含空格的路径周围应用引号来对抗此问题(在PowerShell等其他语言中)。你如何用C#插值做类似的事情。

3 个答案:

答案 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