小编Jer*_*xon的帖子

是Linq还是Lambda?

我知道这是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# linq lambda

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

Trigger和DataTrigger之间有什么区别?

他们似乎是一样的.有显着差异吗?我想我错过了什么.

wpf triggers datatrigger

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

C#处理列表的异步选项

我想更好地理解我在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)

c# parallel-processing multithreading asynchronous

34
推荐指数
2
解决办法
8541
查看次数

桌面Delphi应用程序是否可以通过Windows 8认证(使用Windows App认证工具包)?

显然,Delphi(任何版本)都不支持安全异常处理程序(/ Visual Studio中的/ SAFESEH开关).在Windows 8上使用Windows桌面应用程序认证工具包时会出现警告.对于Windows 8桌面应用程序的每个认证要求:

必须使用/ SafeSEH标志编译您的应用程序,以确保安全的异常处理

显然Delphi缺少这个开关,所以无法完成.我的问题是:

  1. 我的理解是正确的,即使套件只显示警告(没有失败),因为这是一个"必须"的要求,今天的任何Delphi应用程序都无法通过Windows 8认证,因此无法包含在Windows应用商店中?

  2. 可以在编译后以某种方式将SafeSEH表添加到PE文件中(例如,从映射文件或调试符号中提取所需信息),或者我们绝对需要编译器/链接器支持,因此必须等到Embarcadero实现此功能?

要清除,我的应用程序是Windows 32位桌面应用程序(64位兼容),而不是Metro应用程序.

delphi windows-8 app-certification-kit wack

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

如何访问XAML DataTemplate中的控件?

我有这个翻转视图:

<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)

c# windows-8 winrt-xaml windows-store-apps flipview

26
推荐指数
2
解决办法
5万
查看次数

在WinRT中选择XAML的ListView和GridView

XAML中的GridView和ListView似乎是相同的控件.

开发人员如何在两者之间做出选择?

windows-8 windows-runtime winrt-xaml windows-store-apps

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

WinRT-XAML中是否有WrapPanel(而不是WrapGrid)控件?

XAML StackPanel在单个方向上并排对齐控件.A WrapPanel类似但是TextWrapping="Wrap"在XAML中TextBox,当达到相应的高度或宽度时,控件"包裹"到下一列或行.

在此输入图像描述

类似但不一样的是,WrapGrid包装内容,但是在统一的网格中.虽然VariableSizedWrapGrid允许容器中的不同物品.这两种都不WrapGrids能用在外面ItemsControl.所以,他们被取消资格.

当开发人员在Visual Studio中查看他们的本机XAML工具箱时,没有WrapPanel.WPF开发人员有一个WrapPanel他们可能正在寻找这个通用工具来解决他们的场景.所以,我要问:

有没有人知道XAML-WinRT中的WrapPanel?(虚拟化的那个怎么样?)

windows-8 windows-runtime winrt-xaml windows-store-apps

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

什么取代了WinRT中的CommandManager?

我开始使用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中不存在......还有别的东西吗?或者我们是否应该自己明确触发此事件?

c# icommand windows-8 windows-runtime

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

我可以在Windows 10/Windows 8/WinRT中唯一标识设备

是否有任何机制可以唯一地识别设备(即使它是匿名的)?

需要说明的是,"设备"是指计算机/平板电脑.

Windows 8.x.

http://codepaste.net/ybt893

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)

windows-8 windows-runtime

19
推荐指数
3
解决办法
6595
查看次数

如何在WinRT中取消/序列化JSON?

如何获取对象并将其转换为JSON字符串,然后从字符串返回到该对象,特别是在WinRT中为我的Windows 8 Metro应用程序?

c# winrt-xaml

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