我知道字符串是不可变的,对字符串的任何更改只会在内存中创建一个新字符串(并将旧字符串标记为空闲字符串).但是,我想知道我的下面的逻辑是否合理,你实际上可以以一种循环方式修改字符串的内容.
const string baseString = "The quick brown fox jumps over the lazy dog!";
//initialize a new string
string candidateString = new string('\0', baseString.Length);
//Pin the string
GCHandle gcHandle = GCHandle.Alloc(candidateString, GCHandleType.Pinned);
//Copy the contents of the base string to the candidate string
unsafe
{
char* cCandidateString = (char*) gcHandle.AddrOfPinnedObject();
for (int i = 0; i < baseString.Length; i++)
{
cCandidateString[i] = baseString[i];
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法确实改变了内容candidateString(没有在内存中创建新的candidateString),还是运行时通过我的技巧看待它并将其视为普通字符串?
我知道docker-volume-netshare存在这样的插件,我过去使用过它们,但对于这个项目,我仅限于本地驱动程序。
我可以使用传统意义上的本地驱动程序成功创建和使用 CIFS 卷(将用户名/密码内联传递给它),但现在我想通过凭据文件传递凭据。Docker 文档说它支持与 mount 类似的命令,因此,为此,我一直在尝试传递凭据,就像我通过mount命令安装它一样。
我有一个/root/.cifs文件。
username=myusername
password=mypassword
Run Code Online (Sandbox Code Playgroud)
然后我通过手动安装对其进行了测试
mount -t cifs \
-o credentials=/root/.cifs,vers=3.0 \
//192.168.76.20/docker_01 /mnt
Run Code Online (Sandbox Code Playgroud)
它工作成功,我可以读/写数据。所以现在我尝试使用相同的逻辑创建 docker 卷。
docker volume create \
--driver local \
--name persistent \
--opt type=cifs \
--opt device=//192.168.76.20/docker_01 \
--opt o=credentials=/root/.cifs,vers=3.0
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用CIFS VFS: No username specifiedDocker 日志文件中的卷时。
我尝试通过包含用户名 ( --opt o=credentials=/root/.cifs,username=docker01,vers=3.0)来修改音量参数,但这只会导致0xc000006d STATUS_LOGON_FAILURE
有没有办法创建 CIFS 卷而不必内联指定凭据?
是否可以将 JSON 文件 (appsettings.json) 中的属性绑定到使用不同属性名称的类?
{
"WebTarget": {
"WebURL": "http://www.stackoverflow.com"
}
}
Run Code Online (Sandbox Code Playgroud)
public class MyServiceOptions
{
public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想获取该WebURL设置并将其映射到Url选项类中的属性。我已经尝试过[DataMember],[JsonProperty]但它们不起作用。
我知道这并不理想,属性名称应该与 JSON 中的内容匹配,但这是一种特殊情况。
我正在使用 Docker 18.03.1-ce,如果我创建一个容器,将其删除然后重新创建它,内部 DNS 会保留旧地址(除了新地址)。
有没有办法清除或刷新旧条目?如果我删除并重新创建网络,那么它会刷新它,但我不想每次都这样做。
我创建网络:
docker network create -d overlay --attachable --subnet 10.0.0.0/24 --gateway 10.0.0.1 --scope swarm -o parent=ens224 overlay1
Run Code Online (Sandbox Code Playgroud)
然后创建一个容器(本例中为 SQL)
docker container run -d --rm --network overlay1 --name sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Some_SA_Passw0rd' -p 1433:1433 microsoft/mssql-server-linux
Run Code Online (Sandbox Code Playgroud)
如果我在同一个网络上创建一个 Alpine 容器,我可以nslookup sql按名称并解析为10.0.0.6. 没有问题,到目前为止一切都很好。
现在,如果我删除 SQL 容器并重新创建它,则会nslookup sql显示10.0.0.6和10.0.0.8. 该10.0.0.6是原来的地址,不再活着,但仍做出决议。
我的容器使用的名称服务器127.0.0.11是用户创建的网络的典型名称,但我找不到任何可以让我清除其缓存的内容。
也许我遗漏了一些东西,但我认为只要容器被移除,DNS 条目就会被拆除。
任何见解当然值得赞赏!
我有一个从 Inkscape 导出的非常简单的路径(只是一个 + 符号),我想将它用作按钮的内容,但是当我这样做时,路径偏离了中心。
<Button Height="24" Width="24">
<Viewbox HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill">
<Path Fill="#000000" Data="M 11 5 L 11 11 L 5 11 L 5 13 L 11 13 L 11 19 L 13 19 L 13 13 L 19 13 L 19 11 L 13 11 L 13 5 L 11 5 z"/>
</Viewbox>
</Button>
Run Code Online (Sandbox Code Playgroud)
我在一个包裹它Viewbox,所以我可以扩展它,我试着播放HorizontalAlignment,VerticalAlignment和LayoutRounding,但他们似乎并没有影响定位。
我猜路径数据本身对此负责..可能从第一个 Move To (M) 开始,但我对手动编辑路径没有信心。
有什么办法可以纠正这个问题,让它在按钮内居中显示?我有更多的按钮要构建,所以我想了解发生了什么。
这是原始的SVG:
<svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24" enable-background="new …Run Code Online (Sandbox Code Playgroud)