这是公平的在多个链式调用中使用单个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#(VS2013)是否支持任何此类运营商?
SomeObject.?SomeMember = SomeValue;
Run Code Online (Sandbox Code Playgroud)
这应该分配SomeValue
给SomeObject.SomeMember
只有当SomeObject
不为空.
注意:我知道我们可以通过HasValue
其他方式做到这一点.我只是询问新的运营商.
对.所以从WPF转到UWP,我试图x:Bind
用来获得编译时的好处.简单的场景工作正常; 但是我发现了一些我无法解决的问题.它们都是相关的,所以我想我会把它们放在一个地方:
x:Bind
.我d:DataContext
在XAML和构造函数中都设置了DataContext(以及我们在WPF中的操作),但无论如何都不会显示成员.有人做过这个吗?DataContext
总是设置为Page
代码隐藏(真的??),我需要在代码隐藏中定义一个ViewModel类型属性,然后使用该属性x:Bind
.它是否正确?我尝试了它并且它有效但引起了下一个问题.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
工作正常而不必进行属性更改冒泡.或者我错过了什么?
开始使用NLog。主进程(Windows 服务)每隔几秒写入日志文件一次。我需要允许另一个进程(桌面应用程序)在任意时间读取此文件(桌面应用程序不需要写访问权限)。
然而问题是,NLog 在打开文件进行写入时可能会创建排他锁。因此,如果桌面进程在文件被锁定时尝试读取,则会引发异常。
如何配置 NLog 以允许其他进程对日志文件内容进行只读访问,即使主进程已打开日志文件内容进行写入?桌面进程将调用File.ReadAllText()
它,我希望它对于并发操作是安全的。
(我通读文档,发现 NLog 甚至允许从不同进程并发写入日志文件,因此理论上只读访问应该更容易。但我看不到任何解决方案)。
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 一起使用。
尝试隐藏表单而不是关闭它,使用
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)
但如果用户点击关闭,它仍然关闭它.
好.这是场景.这是WPF + MVVM(.net 4.0)应用程序:
DataGrid
和两个按钮上移/下移,这些按钮应该向上或向下移动选定的记录DataGrid
.网格和按钮都使用基于XAML的绑定.DataView
我DataGrid
将绑定的类型的公共属性.然后,ICommand
下面列出了两个实现.这两个按钮将绑定到这两个命令.最后但并非最不重要的是,有两个函数被调用MoveUp()
并且MoveDown()
显而易见.ICommand
实现:在每个命令中,CanExecute()
返回所选记录是否可以分别向上或向下Execute()
移动,并实际通过调用上面描述的ViewModel MoveUp()
和MoveDown()
函数来移动记录.这些命令对象在其构造函数中获取VM对象的引用.首先,我想知道这个架构是否正确并符合MVVM模式?其次,手头的问题是当我更改选定的记录时,我的按钮没有启用/禁用DataGrid
,这带来了两个子问题:
CanExecute()
和何时?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) 假设您的表单上有一个按钮.您将一个匿名函数附加到按钮的Click
事件:
void Test()
{
int x = 10;
btn.Click += (sender, e) => { MessageBox.Show(x.ToString()); };
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作并显示10; 意味着它可以访问局部变量.我的问题是如何以及为什么?匿名函数如何访问本地上下文?
我正在处理的实际问题是我需要将这个匿名函数升级(可以这么说)到常规函数(事件处理程序).但这样做意味着我将失去对变量x的访问权限.我也不能将它作为参数传递,因为那样我就无法将它附加到Click
事件(签名不匹配).我可以通过创建全局变量和所有这些来解决这个问题,但是匿名函数如何能够访问超出其范围的事物?
我最近了解了 Bootstrap Studio 来创建网页,它看起来是一个简单易用的工具。我想知道是否可以生成 HTML 文件,然后在我的 Django Web 应用程序中使用这些文件?
我是否会浪费时间尝试让这两个框架一起工作?
我有一个旧的类库项目,在以前版本的 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 中使用像素着色器来看看我缺少什么吗?