小编dot*_*NET的帖子

在多个链式LINQ查询中使用一个变量

这是公平的在多个链式调用中使用单个lambda表达式变量吗?例如:

MyList.Where(i => i.ID > 20).OrderBy(i => i.Name);
Run Code Online (Sandbox Code Playgroud)

那么i用于Where()保持独立于i使用中OrderBy()还是会彼此产生一些隐藏的副作用,所以我必须为每个使用不同的变量?另外,你的答案也适用于VB.NET吗?

我问这个是因为我在一个稍微不同的上下文中读到我不应该直接在LINQ查询中使用foreach变量,而是在循环中创建变量的本地副本.上面的代码中是否也隐藏了一些类似的效果?

c# linq vb.net lambda

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

可空操作员.?

我记得我在某个地方看过这个,但现在无法在谷歌搜索结果中找到它.

最新的C#(VS2013)是否支持任何此类运营商?

SomeObject.?SomeMember = SomeValue;
Run Code Online (Sandbox Code Playgroud)

这应该分配SomeValueSomeObject.SomeMember只有当SomeObject不为空.

注意:我知道我们可以通过HasValue其他方式做到这一点.我只是询问新的运营商.

c# nullable operators

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

x:在UWP中绑定(通用Windows平台)

对.所以从WPF转到UWP,我试图x:Bind用来获得编译时的好处.简单的场景工作正常; 但是我发现了一些我无法解决的问题.它们都是相关的,所以我想我会把它们放在一个地方:

  1. 我无法使用Intellisense x:Bind.我d:DataContext在XAML和构造函数中都设置了DataContext(以及我们在WPF中的操作),但无论如何都不会显示成员.有人做过这个吗?
  2. 然后我读到某个地方,在UWP中,DataContext总是设置为Page代码隐藏(真的??),我需要在代码隐藏中定义一个ViewModel类型属性,然后使用该属性x:Bind.它是否正确?我尝试了它并且它有效但引起了下一个问题.
  3. 如果我在Page的代码隐藏中定义了ViewModel类型的属性,那么引发PropertyChanged通知的任何子属性都不会更新UI.例如,如果代码隐藏属性被命名Game(类型GameVM)并且在GameVM命名Player(类型GamePlayer)中有公共属性,并且反过来GamePlayer包含名为的属性Name,则x:Bind路径将如下所示{x:Bind Path=Game.Player.Name}.但是,如果我这样做,从Name属性内部引发的任何更改通知都不会更新Page的UI.

我试过的一个替代方案是在每个级别监听PropertyChanged,然后在层次结构中冒泡,但这没有用.即使它确实如此,这样做似乎有点太多了.在WPF子属性中Game.Player.Name工作正常而不必进行属性更改冒泡.或者我错过了什么?

c# xaml mvvm uwp

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

NLog - 允许其他进程读取日志文件

开始使用NLog。主进程(Windows 服务)每隔几秒写入日志文件一次。我需要允许另一个进程(桌面应用程序)在任意时间读取此文件(桌面应用程序不需要写访问权限)。

然而问题是,NLog 在打开文件进行写入时可能会创建排他锁。因此,如果桌面进程在文件被锁定时尝试读取,则会引发异常。

如何配置 NLog 以允许其他进程对日志文件内容进行只读访问,即使主进程已打开日志文件内容进行写入?桌面进程将调用File.ReadAllText()它,我希望它对于并发操作是安全的。

(我通读文档,发现 NLog 甚至允许从不同进程并发写入日志文件,因此理论上只读访问应该更容易。但我看不到任何解决方案)。

c# io nlog

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

await 不会在原始上下文中恢复

await由于某种原因,似乎没有在调用上下文中恢复。我正在调用一个async方法(实际上是几个async方法的层次结构)。一切顺利,直到我最终到达使用 RestSharp 的ExecuteAsync(). 最后的调用如下所示:

IRestResponse Response = await rc.ExecuteAsync(request); //rc is a RestClient object
Run Code Online (Sandbox Code Playgroud)

我已经彻底调试了它,在每个级别true,甚至在调用之前,以下行都会返回ExecuteAsync

System.Threading.Thread.CurrentThread == System.Windows.Application.Current.Dispatcher.Thread
Run Code Online (Sandbox Code Playgroud)

只有在ExecuteAsync()返回服务器数据后,上面的行才变成false,表明上面await没有在调用线程上恢复。因此,调用此异步操作并现在想要将返回的数据分配给 UI 的更高层抛出臭名昭著的 STA 线程异常。

我究竟做错了什么?我已经烧了几个小时并浏览了几篇 SO 帖子和网络文章,但这似乎不起作用。我还添加ConfigureAwait(true)了明确要求它在调用上下文时恢复,但它没有。

这是一个 VSTO Word 插件。我将它与 WPF 一起使用。

c# wpf async-await

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

如何隐藏Form而不是关闭它

尝试隐藏表单而不是关闭它,使用

    private void Playlist_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (e.CloseReason == CloseReason.FormOwnerClosing) //if closed by aplication
        {
            this.Close();
        }
        if (e.CloseReason == CloseReason.UserClosing) //if closed by user
        {
            this.Hide();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但如果用户点击关闭,它仍然关闭它.

.net c# winforms

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

在这种情况下如何调用ICommand.CanExecute?

好.这是场景.这是WPF + MVVM(.net 4.0)应用程序:

  1. 查看:有一个DataGrid和两个按钮上移/下移,这些按钮应该向上或向下移动选定的记录DataGrid.网格和按钮都使用基于XAML的绑定.
  2. ViewModel:具有DataViewDataGrid将绑定的类型的公共属性.然后,ICommand下面列出了两个实现.这两个按钮将绑定到这两个命令.最后但并非最不重要的是,有两个函数被调用MoveUp()并且MoveDown()显而易见.
  3. 两个ICommand实现:在每个命令中,CanExecute()返回所选记录是否可以分别向上或向下Execute()移动,并实际通过调用上面描述的ViewModel MoveUp()MoveDown()函数来移动记录.这些命令对象在其构造函数中获取VM对象的引用.

首先,我想知道这个架构是否正确并符合MVVM模式?其次,手头的问题是当我更改选定的记录时,我的按钮没有启用/禁用DataGrid,这带来了两个子问题:

  1. 谁打电话CanExecute()和何时?
  2. 我怎样才能手动调用它?我CommandManager.InvalidateRequerySuggested()在阅读了其他一些SO问题后尝试过,但这也无济于事.

这是我的CommandBase类,我的Command类都从这个类继承:

internal abstract class CommandBase : DependencyObject, ICommand
{
    public virtual bool CanExecute(Object parameter)
    {
        return true;
    }

    public abstract void Execute(Object parameter);
    public event EventHandler CanExecuteChanged;

    protected void OnCanExecuteChanged(Object sender, EventArgs e)
    {
        CanExecuteChanged(sender, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml mvvm

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

匿名函数和局部变量

假设您的表单上有一个按钮.您将一个匿名函数附加到按钮的Click事件:

void Test()
{
  int x = 10;
  btn.Click += (sender, e) => { MessageBox.Show(x.ToString()); };
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作并显示10; 意味着它可以访问局部变量.我的问题是如何以及为什么?匿名函数如何访问本地上下文?

我正在处理的实际问题是我需要将这个匿名函数升级(可以这么说)到常规函数(事件处理程序).但这样做意味着我将失去对变量x的访问权限.我也不能将它作为参数传递,因为那样我就无法将它附加到Click事件(签名不匹配).我可以通过创建全局变量和所有这些来解决这个问题,但是匿名函数如何能够访问超出其范围的事物?

.net c# scope compilation anonymous-function

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

一起使用 Django 和 Bootstrap Studio

我最近了解了 Bootstrap Studio 来创建网页,它看起来是一个简单易用的工具。我想知道是否可以生成 HTML 文件,然后在我的 Django Web 应用程序中使用这些文件?

我是否会浪费时间尝试让这两个框架一起工作?

django bootstrap-4 bootstrap-studio

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

在VS2022中构建像素着色器项目

我有一个旧的类库项目,在以前版本的 Visual Studio (2017 IIRC) 中构建得很好。该项目包含一个基于 HLSL 的像素着色器,可生成径向颜色选择器。我刚刚将它移植到 VS2022,它不再构建,告诉我它找不到构建任务。这是错误消息:

无法从程序集 ShaderBuildTask 加载“ShaderBuildTask.PixelShaderCompile”任务,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125。无法加载文件或程序集“ShaderBuildTask,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125”或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项均可用,并且任务包含实现 Microsoft.Build.Framework.ITask.AngularGradientShaderEffect 的公共类

我已经ShaderBuildTaskSetup.msi在我的机器上安装了所需的着色器编译器 ( )。重新加载项目并重新启动 VS 也没有帮助。

有人在 VS2022 中使用像素着色器来看看我缺少什么吗?

hlsl msbuild-task visual-studio fragment-shader

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