小编spe*_*der的帖子

从LinqToXYZ切换到LinqToObjects

在回答这个问题时,它让我思考......

我经常使用这种模式:

collectionofsomestuff //here it's LinqToEntities
    .Select(something=>new{something.Name,something.SomeGuid})
    .ToArray() //From here on it's LinqToObjects
    .Select(s=>new SelectListItem()
        {
            Text = s.Name, 
            Value = s.SomeGuid.ToString(), 
            Selected = false
        })
Run Code Online (Sandbox Code Playgroud)

也许我会将它分成几行,但实际上,在这ToArray一点上,我实际上是在枚举我的查询并存储结果序列,这样我就可以用完整的CLR的所有优点来进一步处理它.

因为我对中间列表的任何操作都不感兴趣,所以我会使用ToArray,ToList因为开销较少.

我一直这样做,但我想知道这种问题是否有更好的模式?

c# linq

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

有关C#中对象引用类型转换的问题?

我有一个关于对象类型转换的问题.假设我们有:

A a = new A();
Object o = a;
Run Code Online (Sandbox Code Playgroud)

据我所知,背后发生的是编译器将复制a的地址并存储在o变量的内存区域中.然后,我们可以说a和o引用同一个对象.

如果我们这样做:

String s = "abc";
int a = (int)s;
Run Code Online (Sandbox Code Playgroud)

然后我明白编译器不能将字符串值复制到int内存区域.

但如果我们有:

A a = new A();
B b = (B)a;
Run Code Online (Sandbox Code Playgroud)

这在编译时可能没问题.但是,可能会发生运行时错误,例如"无法投射......".

所以,我不明白在内存中实际发生的事情会导致无法执行上面的转换.它只是将a的地址复制到b的内存区域吗?如果是这样,为什么不可能呢?或者它会复制A的所有成员来替换B的所有成员?

谢谢

c# types casting reference object

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

一年可以有364天吗?

这里有一点乐趣。

如果我们查看 dotnet 源代码,可以在文件头部TimeSpan.cs找到以下注释:

...而一年可以包含 365 或 364 天

我应该担心吗?

comments date .net-4.0

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

C#循环和按键中断循环

我的代码包含这样的内容:

{
    var comeback = Cursor.Position;
    code goes here
    code goes here
    code goes here
    code goes here
    code goes here
    code goes here
    Cursor.Position = restart;
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望这个循环不断循环,直到我调用一个按键停止.

我不能做什么我写这个循环的代码,或者我应该采取不同的方式来解决这个问题.

提前致谢

c# infinite-loop winforms

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

最大并发节流

我希望这个问题有很多可能的解决方案,我可以自己提出一些解决方案,其中一些明显优于其他解决方案,但我确定没有一个解决方案是最优的,所以我很想听听那些真正的多线程专家.

我有大约100件可以同时执行的工作,因为它们之间没有依赖关系.如果我按顺序执行这些操作,我的总执行时间大约是1:30.如果我在线程池中对每个工作进行排队,则需要大约2米,这告诉我,我正在尝试一次做太多,并且所有这些线程之间的上下文切换否定了拥有这些线程的优势.

所以基于这个假设(如果这是错误的话,请随时把我击倒)如果我只排队到系统中的核心数(这台机器上有8个),那么任何时候我都会减少上下文切换从而提高整体效率(其他流程线程当然不能承受),有人能建议这样做的最佳模式/技术吗?

顺便说一下,我使用的是smartthreadpool.codeplex.com,但我没有.

.net c# multithreading .net-3.5

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

为什么Uri对不同的方案表现不同?

在与Uri班级一起回答另一个问题时,我发现了一些对我来说很奇怪的东西:

考虑这两个Uris:

var u1 = new Uri("http://a.b:33/abc%2fdef/c?d=f");
var u2 = new Uri("foobar://a.b:33/abc%2fdef/c?d=f");
Run Code Online (Sandbox Code Playgroud)

他们的区别仅在于他们的计划.提供的标识符的所有其他元素都是相同的.

那么,为什么,当我转储Segments这些Uri实例的属性时,我是否看到以下输出u1:

/ 
abc/ 
def/ 
c 

......但不同的输出u2

/ 
abc%2fdef/ 
c 

为什么不同方案的解析行为不同?

c# uri url-encoding percent-encoding

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

CHECKSUM和CHECKSUM_AGG:算法是什么?

我们在sql server中执行一些数据的校​​验和,如下所示:

declare @cs int;
select 
    @cs = CHECKSUM_AGG(CHECKSUM(someid, position))
from 
    SomeTable
where 
    userid = @userId
group by 
    userid;
Run Code Online (Sandbox Code Playgroud)

然后,这些数据与客户共享.我们希望能够在客户端重复校验和...但是似乎没有关于如何计算上述函数中的校验和的任何信息.任何人都可以开导我吗?

sql-server checksum sql-server-2008

4
推荐指数
2
解决办法
2759
查看次数

如何摆脱字符串中的\ r \n

我正在尝试从C#中获取来自Gmail的邮件,

但邮件正文如下所示"\r\n\r\nBODY\r\n\r\n"

我如何才能"BODY"从字符串中获取信息?

我试图循环它,但我发现循环时"\r"变成了一个" "

c# string

4
推荐指数
2
解决办法
1302
查看次数

使用TcpListener取消NetworkStream.ReadAsync

请考虑以下简化示例(准备在LinqPad中滚动,需要提升帐户):

void Main()
{
    Go();
    Thread.Sleep(100000);
}
async void Go()
{
    TcpListener listener = new TcpListener(IPAddress.Any, 6666);
    try
    {
        cts.Token.Register(() => Console.WriteLine("Token was canceled"));
        listener.Start();
        using(TcpClient client = await listener.AcceptTcpClientAsync()
                                               .ConfigureAwait(false))
        using(var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
        {
            var stream=client.GetStream();
            var buffer=new byte[64];
            try
            {
                var amtRead = await stream.ReadAsync(buffer,
                                                     0,
                                                     buffer.Length,
                                                     cts.Token);
                Console.WriteLine("finished");
            }
            catch(TaskCanceledException)
            {
                Console.WriteLine("boom");
            }
        }
    }
    finally
    {
        listener.Stop();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我连接一个telnet客户端localhost:6666并且在5秒钟内无所事事,为什么我会看到"令牌被取消"但从未看到"繁荣"(或"完成")?

这个NetworkStream会不会取消取消吗?

我可以结合使用Task.Delay()和解决这个问题Task.WhenAny,但是我希望能够按预期工作.

相反,以下取消示例:

async void Go(CancellationToken ct)
{ …
Run Code Online (Sandbox Code Playgroud)

c# tcplistener stream cancellation async-await

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

.Net Core Web Api异步无关紧要?

我一直用async关键字编写我的Web Api控制器方法,并且一直在使用async.我最近尝试进行方法同步以查看它将如何影响性能,并且发现它对任何其他http请求没有阻塞影响感到震惊.

举例 -

[Route("Foo")]
class FooController {
  [HttpGet("Hello")]
  public string GetHello()
  {
    Thread.Sleep(100000); // 100 seconds
    return "Hello";
  }

  [HttpGet("Goodbye")]
  public string GetGoodbye()
  {
    return "Goodbye";
  }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以运行GET=> /Foo/Hello后跟任意数量的GET=>,/Foo/Goodbye并且我对Goodbye端点的请求没有阻塞.

我原本以为我需要让Hello方法异步,以便对Goodbye端点的请求会毫不拖延地返回.但是使这个方法同步/异步没有效果!

非常困惑.Web Api应用程序不需要异步吗?为什么推荐?

c# asynchronous asp.net-core

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