小编Bob*_*hiv的帖子

使用LINQ获取IEnumerable中的上一个和下一个项目

我有一个自定义类型的IEnumerable.(我是从SelectMany那里得到的)

我在IEnumerable中也有一个项目(myItem),我希望IEnumerable中的上一个和下一个项目.

目前,我正在做这样的想法:

var previousItem = myIEnumerable.Reverse().SkipWhile( 
    i => i.UniqueObjectID != myItem.UniqueObjectID).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我可以通过简单地省略来获得下一个项目.Reverse.

或者,我可以:

int index = myIEnumerable.ToList().FindIndex( 
    i => i.UniqueObjectID == myItem.UniqueObjectID)
Run Code Online (Sandbox Code Playgroud)

然后.ElementAt(index +/- 1)用来获取上一个或下一个项目.

  1. 哪两个选项更好?
  2. 有没有更好的选择?

"更好"包括性能(内存和速度)和可读性的组合; 可读性是我的主要关注点.

c# linq ienumerable

32
推荐指数
3
解决办法
4万
查看次数

并发字典AddOrUpdate与索引添加

我有两种方法将值分配给当前项目中并发字典中的现有键.

A. concurrentDictionary1[key] = value;;

B. concurrentDictionary2.AddOrUpdate(key, value, (k, v) => value);

如果我知道"密钥"存在,这些功能是否相同?

并发字典的并发性提供的保护是否被方法'A'绕过?

这有什么区别?选择一个而不是另一个的原因是什么?

我浏览了msdn上的文档,似乎他们只用方法'A'初始化并发字典,而不是更新它.

c#

25
推荐指数
2
解决办法
8773
查看次数

通过提供模数和指数进行RSA加密

我正在创建一个C#Winforms应用程序,它通过HTTPS将数据发送到服务器.

登录机制应该是这样的:

  1. 我将用户名发送到服务器,它以rsa-modulus和rsa-exponent响应

  2. 我使用这些给定的参数加密密码,并将用户名+密码发送到服务器进行身份验证

我已经尝试了这个RSACryptoServiceProvider课程,但我找不到样本或任何说法如何使用给定的模数和指数进行加密?.

我认为没有指定任何值,它做默认加密参数..

所以,如果有人之前已经这样做了,他们可以给我一些提示吗?谢谢

更新:根据Carsten Konig先生的建议,.我试图用RSAParameters来做RSA.ImportParameters,但它返回带有加密异常的"BAD DATA"错误.我的代码如下.

我也尝试过RSA.FromXmlString(mykey); (其中mykey包含一个带有模数和exp的xml字符串)但是我也得到了一个带有加密异常的"BAD DATA"错误...任何人都有什么想法吗?或者如果它的一些微软bug,谁能建议其他一些体面的库容易做到这一点?

RSAParameters rsaparam = new RSAParameters(); 
rsaparam.Modulus = modbytes; 
rsaparam.Exponent = expbytes; 
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider() ; 
RSA.ImportParameters(rsaparam); 
byte[] encryptedData = RSA.Encrypt(dataToEncrypt, false)
Run Code Online (Sandbox Code Playgroud)

c# encryption rsa winforms

7
推荐指数
1
解决办法
1万
查看次数

如何显示结构的字段?

我创建了一个结构:

public struct User {
   public string name;
   public string email;
   public string age;
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个:

 User user = new User();
 user.name = "Freewind";
 user.email = "abc@test.com";
 user.age = 100;
Run Code Online (Sandbox Code Playgroud)

然后显示它:

MessageBox.Show(user.ToString());
Run Code Online (Sandbox Code Playgroud)

我希望它可以打印用户结构的所有字段,但事实并非如此.它只是显示:

MyApp.User
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来显示结构的所有字段?

c# debugging struct

4
推荐指数
1
解决办法
8576
查看次数

如果连接已经打开,可以调用OracleConnection.Open()吗?

IOW,有没有一种标准的测试方法,la:

if (! con.Open())
  con.Open();
Run Code Online (Sandbox Code Playgroud)

更新:我想我没有提到这些是我正在使用的Oracle的ODP组件.OracleConnection组件没有ConnectionState属性.

.net c# oracle database-connection winforms

3
推荐指数
1
解决办法
7271
查看次数

正则表达式在C#中匹配2 alpha加6位数

我需要一个regex匹配这个模式(使用C#)

我的匹配必须以2个字母字符(MA或CA)开头,并且必须以6或7位数字结尾; 例如CA123456或MA123456或MA1234567

这是我尝试过的:

Regex.IsMatch(StringInput, @"^[MA]{2}|^[CA]{2}\d{6,7}?")) 
Run Code Online (Sandbox Code Playgroud)

不幸的是,它似乎与大多数东西相匹配

c# regex

2
推荐指数
1
解决办法
794
查看次数