小编Col*_*ech的帖子

使用LINQ通过一个属性比较两个列表

说我有以下内容:

    class Widget1{
        public int TypeID { get; set; }
        public string Color { get; set; }
    }

    class Widget2
    {
        public int TypeID { get; set; }
        public string Brand { get; set; }
    }

    private void test()
    {
        List<Widget1> widgets1 = new List<Widget1>();
        List<Widget2> widgets2 = new List<Widget2>();
        List<Widget1> widgets1_in_widgets2 = new List<Widget1>();

        //some code here to populate widgets1 and widgets2

        foreach (Widget1 w1 in widgets1)
        {
            foreach (Widget2 w2 in widgets2)
            {
                if (w1.TypeID == w2.TypeID)
                { …
Run Code Online (Sandbox Code Playgroud)

c# linq collections list

42
推荐指数
4
解决办法
8万
查看次数

为什么LINQ在这个例子中更快

我写了以下内容来测试使用foreachvs 的性能LINQ:

private class Widget
{
    public string Name { get; set; }
}

static void Main(string[] args)
{
    List<Widget> widgets = new List<Widget>();
    int found = 0;

    for (int i = 0; i <= 500000 - 1; i++)
        widgets.Add(new Widget() { Name = Guid.NewGuid().ToString() });

    DateTime starttime = DateTime.Now;

    foreach (Widget w in widgets)
    {
        if (w.Name.StartsWith("4"))
            found += 1;
    }

    Console.WriteLine(found + " - " + DateTime.Now.Subtract(starttime).Milliseconds + " ms");

    starttime = DateTime.Now;
    found …
Run Code Online (Sandbox Code Playgroud)

c# linq performance foreach

15
推荐指数
1
解决办法
724
查看次数

无法创建SSL/TLS安全通道适用于winforms但不适用于asp.net

我有一个Web服务,我通过"添加服务参考"注册,需要HTTPS和证书.下面是我实例化我的服务的代码:

        service = new MyReferencedWebService();

        X509Certificate2 cert = new X509Certificate2();

        var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Mycert.cer");
        var bytes = new byte[stream.Length];

        stream.Read(bytes, 0, bytes.Length);

        cert.Import(bytes, MYPASSWORD, X509KeyStorageFlags.DefaultKeySet);

        service.ClientCredentials.ClientCertificate.Certificate = cert;
Run Code Online (Sandbox Code Playgroud)

我的配置看起来像这样:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="RecordGeneratorWebServiceSoapHttp">
                <security mode="Transport">
                    <transport clientCredentialType="Certificate" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://mywebserviceurl"
            binding="basicHttpBinding" bindingConfiguration="RecordGeneratorWebServiceSoapHttp"
            contract="MyService.RecordGeneratorWebServiceInterface"
            name="RecordGeneratorWebServicePort" />
    </client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

如果我创建一个简单的winforms .exe并使用上面的代码,我会收到来自我的Web服务的响应.但是,如果我在ASP.NET中使用相同的代码,我会得到以下内容:

请求已中止:无法创建SSL/TLS安全通道.

如何在ASP.NET中完成这项工作?

编辑: 我应该补充.我使用的客户端证书与智能卡绑定,需要输入PIN才能使用.不确定这是否有所不同.

当客户端登录到应用程序时,它会提示他们输入证书PIN.在这种情况下,他们将CAC卡插入CAC阅读器.那么也许我可以以某种方式使用Request.ClientCertificate?

c# asp.net ssl web-services

13
推荐指数
1
解决办法
4087
查看次数

将字符串转换为动态对象

是否有一种直接的转换方式:

string str = "a=1,b=2,c=3";
Run Code Online (Sandbox Code Playgroud)

成:

dynamic d = new { a = 1, b = 2, c = 3 };
Run Code Online (Sandbox Code Playgroud)

我想我可能会编写一个函数来拆分字符串并循环结果以创建动态对象.我只是想知道是否有更优雅的方式来做到这一点.

c# dynamic

10
推荐指数
2
解决办法
9371
查看次数

是否需要使用stringbuilder?

我们都知道连接字符串会导致效率问题,特别是在循环中.我被教导用来StringBuilder防止这些问题.

所以这:

str += someotherstring
Run Code Online (Sandbox Code Playgroud)

变成这样:

StringBuilder sb = new StringBuilder();   
sb.AppendLine(someotherstring);
Run Code Online (Sandbox Code Playgroud)

但我的理解是.NET框架3.5及更高版本中的CLR足够智能,可以为这两种方法输出相同的IL.那么我是否应该在我的团队代码评论中强制执行stringbuilder?

编辑:我认为Servy在评论中点头:

在连接编译时已知的许多字符串时就是这种情况.因此,当在编译时连接多个字符串时,不需要使用SB.当在编译时连接许多未知的字符串时,它不能这样做

c# string clr stringbuilder cil

6
推荐指数
2
解决办法
1108
查看次数

Jquery Draggable无法正确定位滚动条

我需要创建一个图像查看器,允许将大图像加载到容器中,然后在容器中拖动,以便整个图像可见,但图像永远不会被拖出边界.下面的代码完美地工作,除了滚动条不能准确地与拖动图像的位置同步并允许图像滚动出边界.如何在拖动时将滚动条与图像同步?

编辑:

是一个有效的例子

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
        <style>
            .container{margin: auto;cursor: move;width: 80%; position: relative; min-width:885px;}
            #screen{overflow:auto; width: 80%; height: 600px; clear: both; border: 1px solid black; background-color: #CCCCCC; float:left; margin-right: 15px;}
        </style>
    </head>
    <body>
          <div class="container">
                <div id="screen">
                    <img class="drag-image" id="draggable" />
                </div>
          </div>
    </body>
    </html>

    <script type="text/javascript">

        $(function () {

            $('#draggable').attr('src', 'http://i.imgur.com/uPjIz.jpg').load(function () {
                CreateDraggablePicture();
            });

        });

        function CreateDraggablePicture() {

            var x = ($('#draggable').width() - $('#screen').width() - $('#screen').offset().left) * -1;
            var y …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-ui

5
推荐指数
1
解决办法
549
查看次数

Winforms,通过表单名称获取表单实例

我需要一个方法,通过表单的名称返回一个新的表单实例.这是我到目前为止:

    public Form GetFormByName(string frmname)
    {
        return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) && 
            a.Name == frmname).Cast<Form>().FirstOrDefault();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试执行此代码时,我收到以下错误:

无法将类型为"System.RuntimeType"的对象强制转换为"System.Windows.Forms.Form".

这个错误是什么意思?

c# winforms

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

如何阻止BackgroundWorker排队?

我有以下代码:

for (int i = 1; i <= 500; i++)
{
    BackgroundWorker t = new BackgroundWorker();

    t.DoWork += SOME DB METHOD THAT TAKES 5 SECONDS
    t.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

当我在SQL中对此进行分析时,我注意到BackgroundWorker似乎是以这样的方式对线程进行排队,即只有4个或5个活动连接同时打开,而所有500个连接一次打开.我的数据库没有超时或阻止.如何防止此排队并同时使用所有500个并发线程命中数据库?

c# sql multithreading

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

在不事先了解架构的情况下解析XML的更好方法

使用SQL Server 2005我需要解析XML中的所有值,而不事先知道元素名称.

这是我有的:

declare @xml xml

--REMEMBER THIS XML COULD CONTAIN ANYTHING. THIS IS AN EXAMPLE
set @xml = '
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <id>1</id>
  <name>asdf</name>
  <siteaddress1>asdf</siteaddress1>
  <siteaddress2>asdf</siteaddress2>
  <sitecity>asdf</sitecity>
  <sitestateid>4</sitestateid>
  <sitezip>333333</sitezip>
  <phone>asdfsadf</phone>
  <epaid>34343</epaid>
</row>'

declare @rows int
declare @i int
declare @sql nvarchar(max)

set @i = 0
set @rows = (SELECT Tbl.Col.value('count(*)', 'int') FROM @xml.nodes('//row') Tbl(Col))
set @sql = ''

while (@i <= @rows)
begin
    set @i = @i + 1
    set @sql = @sql + 'select Tbl.Col.value(''*[' + cast(@i as …
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql sql-server-2005 xml-parsing

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

将int转换为十进制(18,18)

我需要将值10插入到column1中,并使用数据类型decimal(18,18).

插入表column1值10

给出错误算术溢出错误将数字转换为数据类型数字

如果我试图施放

select cast(10 as decimal(18,18))
Run Code Online (Sandbox Code Playgroud)

我得到相同的错误算术溢出错误转换int到数据类型数字.

我也试过了

select cast(cast(10 as float) as decimal(18,18))
Run Code Online (Sandbox Code Playgroud)

并得到相同的错误.

如何将值10转换为十进制(18,18)?

sql sql-server-2008

0
推荐指数
1
解决办法
1068
查看次数