Resharper的代码检查建议在任何地方使用C#而不是显式类型的var.我不喜欢这个选项,因为太多的var会让事情变得不清楚,所以我禁用了那个选项.但是我喜欢使用var的情况是在初始化的情况下,使用泛型的同一行上的类型的两倍(因此在与java 7中的菱形运算符类似的情况下),如:
Dictionary<string string> dic = new Dictionary<string, string>();
// I want a suggestion to replace this to
var dic = new Dictionary<string, string>();
// but I don't want to replace things like this:
Person p = new Person();
Run Code Online (Sandbox Code Playgroud)
我在Resharper中制作了一个自定义模式:
Dictionary<$type1$, $type2$> $id$ = new Dictionary<$type1$, $type2$>();
Run Code Online (Sandbox Code Playgroud)
替换为:
var $id$ = new Dictionary<$type1$, $type2$>();
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但模式还会找到已使用规则转换的行.为什么以及如何解决这个问题?
编辑:将部分文本设置为粗体,因为没有人看到它.
我必须与第三方签订 Diffie Hellman 协议,该第三方以 .NET ECDiffieHellmanCng XmlString 格式传输公钥。我无法更改他们的代码。他们发送的内容如下所示:
<ECDHKeyValue xmlns="http://www.w3.org/2001/04/xmldsig-more#">
<DomainParameters>
<NamedCurve URN="urn:oid:1.3.132.0.35" />
</DomainParameters>
<PublicKey>
<X Value="11" xsi:type="PrimeFieldElemType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<Y Value="17" xsi:type="PrimeFieldElemType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</PublicKey>
</ECDHKeyValue>
Run Code Online (Sandbox Code Playgroud)
他们使用典型的 .NET Framework 代码生成它,如下所示:
using (ECDiffieHellmanCng dhKey = new ECDiffieHellmanCng())
{
dhKey.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
dhKey.HashAlgorithm = CngAlgorithm.Sha256;
Console.WriteLine(dhKey.PublicKey.ToXmlString());
}
Run Code Online (Sandbox Code Playgroud)
他们希望以相同的格式接收我的公钥。他们像这样使用我的公钥:
ECDiffieHellmanCngPublicKey pbkey = ECDiffieHellmanCngPublicKey.FromXmlString(xmlHere);
Run Code Online (Sandbox Code Playgroud)
我在 .NET 核心 2.1 中工作。不幸的是,ECDiffieHellmanCng 类等目前尚未在 .NET 核心中实现。我想我可以为此使用 BouncyCastle for .NET Core 包:https ://www.nuget.org/packages/BouncyCastle.NetCore/ 我假设它们都实现了相同的标准并且它们将兼容。
我知道如何与充气城堡完全达成一致,但是我不清楚如何从 .NET ECDiffieHellmanCng 中的 xml 中的 X 和 Y 值开始,以及如何确保我使用兼容的参数. 我也不清楚如何从我生成的充气城堡公钥中获取 X …