我知道这是Linq:
var _Results = from item in _List
where item.Value == 1
select item;
Run Code Online (Sandbox Code Playgroud)
我知道这是Lambda:
var _Results = _List.Where(x => x.Value == 1);
Run Code Online (Sandbox Code Playgroud)
编者注:以上不仅仅是Lambda,Linq使用的是"方法语法",其谓词是Lambda.需要说明的是,以上两个样本都是Linq(我原来的帖子不正确,但我留下了错误来说明提示问题的混乱).
但是Linq是Lambda的子集还是什么?
为什么有两个看似相同的技术?
是否有技术上的理由来选择其中一个?
我想更好地理解我在C#中的Async和Parallel选项.在下面的片段中,我列出了我最常遇到的5种方法.但我不确定选择哪个 - 或者更好的是,在选择时要考虑的标准:
方法1:任务
(见http://msdn.microsoft.com/en-us/library/dd321439.aspx)
调用StartNew在功能上等同于使用其构造函数之一创建Task,然后调用Start来安排执行.但是,除非必须分离创建和调度,否则StartNew是简化和性能的推荐方法.
TaskFactory的StartNew方法应该是创建和调度计算任务的首选机制,但是对于必须分离创建和调度的场景,可以使用构造函数,然后可以使用任务的Start方法来安排任务以便稍后执行时间.
// using System.Threading.Tasks.Task.Factory
void Do_1()
{
var _List = GetList();
_List.ForEach(i => Task.Factory.StartNew(_ => { DoSomething(i); }));
}
Run Code Online (Sandbox Code Playgroud)
方法2:QueueUserWorkItem
(参见http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx)
您可以将系统内存允许的线程池请求排队.如果请求多于线程池线程,则其他请求将保持排队,直到线程池线程可用.
您可以将排队方法所需的数据放在定义方法的类的实例字段中,也可以使用接受包含必要数据的对象的QueueUserWorkItem(WaitCallback,Object)重载.
// using System.Threading.ThreadPool
void Do_2()
{
var _List = GetList();
var _Action = new WaitCallback((o) => { DoSomething(o); });
_List.ForEach(x => ThreadPool.QueueUserWorkItem(_Action));
}
Run Code Online (Sandbox Code Playgroud)
方法3:Parallel.Foreach
(参见:http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach.aspx)
Parallel类为常见操作提供基于库的数据并行替换,例如for循环,每个循环以及一组语句的执行.
为可枚举源中的每个元素调用一次body委托.它以当前元素作为参数提供.
// using System.Threading.Tasks.Parallel
void Do_3()
{
var _List = GetList();
var _Action = new Action<object>((o) => …Run Code Online (Sandbox Code Playgroud) 显然,Delphi(任何版本)都不支持安全异常处理程序(/ Visual Studio中的/ SAFESEH开关).在Windows 8上使用Windows桌面应用程序认证工具包时会出现警告.对于Windows 8桌面应用程序的每个认证要求:
必须使用/ SafeSEH标志编译您的应用程序,以确保安全的异常处理
显然Delphi缺少这个开关,所以无法完成.我的问题是:
我的理解是正确的,即使套件只显示警告(没有失败),因为这是一个"必须"的要求,今天的任何Delphi应用程序都无法通过Windows 8认证,因此无法包含在Windows应用商店中?
可以在编译后以某种方式将SafeSEH表添加到PE文件中(例如,从映射文件或调试符号中提取所需信息),或者我们绝对需要编译器/链接器支持,因此必须等到Embarcadero实现此功能?
要清除,我的应用程序是Windows 32位桌面应用程序(64位兼容),而不是Metro应用程序.
我有这个翻转视图:
<FlipView x:Name="models_list" SelectionChanged="selectionChanged">
<FlipView.ItemTemplate>
<DataTemplate>
<Grid x:Name="cv">
<Image x:Name="img1" Source = "{Binding ModelImage}" Stretch="Fill" Tag="{Binding ModelTag}"/>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
我想找到当前所选索引的img1.在搜索它时,我在这里的一些帖子中找到了这个方法:
private DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
{
int childNumber = VisualTreeHelper.GetChildrenCount(control);
for (int i = 0; i < childNumber; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(control, i);
FrameworkElement fe = child as FrameworkElement;
// Not a framework element or is null
if (fe == null) return null;
if (child is T && fe.Name== ctrlName)
{
// Found the control so …Run Code Online (Sandbox Code Playgroud) XAML中的GridView和ListView似乎是相同的控件.
开发人员如何在两者之间做出选择?
XAML StackPanel在单个方向上并排对齐控件.A WrapPanel类似但是TextWrapping="Wrap"在XAML中TextBox,当达到相应的高度或宽度时,控件"包裹"到下一列或行.

类似但不一样的是,WrapGrid包装内容,但是在统一的网格中.虽然VariableSizedWrapGrid允许容器中的不同物品.这两种都不WrapGrids能用在外面ItemsControl.所以,他们被取消资格.
当开发人员在Visual Studio中查看他们的本机XAML工具箱时,没有WrapPanel.WPF开发人员有一个WrapPanel他们可能正在寻找这个通用工具来解决他们的场景.所以,我要问:
有没有人知道XAML-WinRT中的WrapPanel?(虚拟化的那个怎么样?)
我开始使用Metro风格的应用程序(我知道我们不应该将它称为Metro,但我永远不会记得它应该被称为...),而我正在实现一个DelegateCommand用于MVVM 的类.在WPF中,ICommand.CanExecuteChanged事件通常像这样实现:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
Run Code Online (Sandbox Code Playgroud)
但是这个CommandManager类在WinRT中不存在......还有别的东西吗?或者我们是否应该自己明确触发此事件?
是否有任何机制可以唯一地识别设备(即使它是匿名的)?
需要说明的是,"设备"是指计算机/平板电脑.
Windows 8.x.
string HardwareId()
{
var token = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
Run Code Online (Sandbox Code Playgroud)
Windows 10
您必须添加Mobile和/或Desktop扩展SDK.
string HardwareId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
Run Code Online (Sandbox Code Playgroud) 如何获取对象并将其转换为JSON字符串,然后从字符串返回到该对象,特别是在WinRT中为我的Windows 8 Metro应用程序?
windows-8 ×6
c# ×5
winrt-xaml ×4
asynchronous ×1
datatrigger ×1
delphi ×1
flipview ×1
icommand ×1
lambda ×1
linq ×1
triggers ×1
wack ×1
wpf ×1