小编Mar*_*cus的帖子

?:LINQ中的条件运算符未按预期工作

我遇到了一个LINQ查询问题,所以我在LINQPad中为它做了一个简化版本来帮助我.问题是,我不明白为什么它仍然没有做我认为应该做的事情......

var list = "1 2 3 4".Split();
var result = list.FirstOrDefault(x =>
                    x == "3"
                    && true);
result.Dump();
Run Code Online (Sandbox Code Playgroud)

3就像人们想象的那样回馈.
但是,当我运行这个时:

var list = "1 2 3 4".Split();
var result = list.FirstOrDefault(x =>
                    x == "3"
                    && false ? false : true);
Run Code Online (Sandbox Code Playgroud)

1回来了.最后一行是实际代码的简化.这两个例子都应该给出true最后一行,它会返回3,但是带有条件运算符的查询会在那里引发一个扭结.

我错过了什么?

c# linq conditional conditional-operator

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

将<string>列为GridView数据源.我在GV的BoundField中为DataField添加了什么?

我有一个List<string>我正在使用DataSourceGridView.我不想自动生成列(它将"Item"作为标题).我怎么放的DataField,以如果我使用的是得到字符串BoundField?又<%# Eval( [whatgoeshere] ) %>在标记中?

.net asp.net data-binding gridview

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

条件运算符没有评估两次?

说我有以下内容:

MyDate = 
  (db.MyTables.FirstOrDefault(x => x.MyID == idToFind).DateValue == DateTime.MinValue) 
    ? DateTime.Now 
    : db.MyTables.FirstOrDefault(x => x.MyID == idToFind).DateValue
Run Code Online (Sandbox Code Playgroud)

如果没有运行两次LINQ查询,有没有办法做到这一点?
我不能先将它运行到temp变量中,因为这个查询本身就是一个更大的LINQ查询的一部分.

c# conditional conditional-operator

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

WCF Stream.Read 在客户端总是返回 0

我花了一天的大部分时间试图弄清楚为什么这不起作用。我有一个 WCF 服务,它将对象流式传输到客户端。然后客户端应该将文件写入其磁盘。但是当我调用stream.Read(buffer, 0, bufferLength)它时总是返回 0。这是我的代码:

namespace StreamServiceNS
{
    [ServiceContract]
    public interface IStreamService
    {
        [OperationContract]
        Stream downloadStreamFile();
    }
}
class StreamService : IStreamService
{
    public Stream downloadStreamFile()
    {
        ISSSteamFile sFile = getStreamFile();
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        bf.Serialize(stream, sFile);
        return stream;
    }
}
Run Code Online (Sandbox Code Playgroud)

服务配置文件:

<system.serviceModel>
<services>
  <service name="StreamServiceNS.StreamService">
    <endpoint address="stream" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IStreamService"
              name="BasicHttpEndpoint_IStreamService" contract="SWUpdaterService.ISWUService" />
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IStreamService" transferMode="StreamedResponse" 
             maxReceivedMessageSize="209715200"></binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceThrottling maxConcurrentCalls ="100" maxConcurrentSessions="400"/>
      <serviceMetadata …
Run Code Online (Sandbox Code Playgroud)

c# streaming wcf wcf-streaming

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

有没有"更漂亮"的方式来做到这一点?

说我有线

dirs.ToList().ForEach(d => item.Items.Add(MyMethod(d)));
Run Code Online (Sandbox Code Playgroud)

但是现在我想避免添加到我的列表中,如果该方法返回null.有没有比这更漂亮的方式

foreach(var d in dirs)
{
    object obj = MyMethod(d);
    if(obj != null)
        myList.Items.Add(obj);
}
Run Code Online (Sandbox Code Playgroud)

c# foreach

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

如果explorer.exe没有运行,可以使用SendMessageW(...)?

我正在尝试使用标准SendMessageW() 方法从控制台应用程序取消静音.但是,我们有自己的应用程序作为shell运行,而不是explorer.exe.当我试图取消静音时,没有任何反应; 但是一旦我启动资源管理器它就可以了.是否必须运行资源管理器才能发送消息?
码:

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319;
SendMessageW(Process.GetCurrentProcess().MainWindowHandle, WM_APPCOMMAND, Process.GetCurrentProcess().MainWindowHandle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
Run Code Online (Sandbox Code Playgroud)

返回值为SendMessageW()0.
如果需要资源管理器,是否有人知道另一种取消静音方法?

Side Note
我刚刚尝试使用vbs:

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys(chr(&hAD))
Run Code Online (Sandbox Code Playgroud)

并得到了相同的结果.只有在explorer.exe运行时才取消静音.

c# explorer message-queue sendmessage

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

哪个更好?它甚至重要吗?

这可能是一个愚蠢的问题,但是我想从OnSelectedIndexChanged我的ASP .NET应用程序中的事件中获取两个值.
哪个更好?

var personId = Convert.ToInt32(((GridView)sender).SelectedDataKey.Values["PersonId"]);
var name = ((GridView)sender).SelectedDataKey.Values["Name"].ToString();
Run Code Online (Sandbox Code Playgroud)

要么

var gView = (GridView)sender;
var personId = Convert.ToInt32(gView.SelectedDataKey.Values["PersonId"]);
var name = gView.SelectedDataKey.Values["Name"].ToString();
Run Code Online (Sandbox Code Playgroud)

在速度变化的情况下,两次投射GridView会产生多大的影响?如果我提取更多价值怎么办?还有其他一些

c# optimization

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