小编Gle*_*den的帖子

检查每个列表项的语句

我有一个const experience值,person对象,列表skill和方法(不能修改它)hasSkill(skill,person,experience)返回布尔值.我想检查person列表中的所有技能.

我的代码是:

int experience = 5;

private hasAllSkills(person){
return skillList.stream().filter(s -> hasSingleSkill(s,person)).collect(Collectors.toList()).size() == skillList.size() ? true : false;
}

private boolean hasSingleSkill(Skill s, Person p){
return hasSkill(s,p,experience);
}
Run Code Online (Sandbox Code Playgroud)

我很确定有更好的解决方案但找不到它; 我该怎么做来修复我的代码?

java java-8 java-stream

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

用于虚拟内存管理的新 Windows 8.1 API:“DiscardVirtualMemory()”与“VirtualAlloc()”以及“MEM_RESET”和“MEM_RESET_UNDO”

Windows 8.1/Server 2012RC2 刚刚引入了用于虚拟内存管理的新 API:OfferVirtualMemory()、ReclaimVirtualMemory()、DiscardVirtualMemory(),它们的用法非常简单,只需查看它们的名称即可。

我不明白的是这些 API 如何与VirtualAlloc()标志MEM_RESET和一起工作MEM_RESET_UNDO,以及有哪些细微的区别。

对于OfferVirtualMemory(),MSDN 表示它与VirtualAlloc()+非常相似MEM_RESET,只不过它从工作集中删除页面,并限制对页面的进一步访问。

因此,基本上它限制了对页面的访问,如果我想再次访问这些页面,我必须调用ReclaimVirtualMemory(). 这很好,但不应该MEM_RESET也从工作集中删除页面吗?不应该MEM_RESET充当 POSIXMADV_DONTNEED标志,madvise(2)它基本上从进程的页表中删除页面,如果我将来再次访问这些页面,访问将生成软故障,并且这些页面将再次重新分配,初始化为零。

当然,如果这是真的,页面将从进程的工作集中删除,因为它们基本上被释放,即使进程保留分配的虚拟地址,并看到它们“已提交”。

现在,让我们看看DiscardVirtualMemory():这里 MSDN 没有提到任何关于MEM_RESETflag 的内容,但是如果我阅读了这个 API 的描述,它似乎与+确实是一样的。VirtualAlloc()MEM_RESET

那么,有谁知道这些 API 之间是否存在一些差异,以及这些细微差异的正确用例是什么?如果他们引入了像 一样的全新 API DiscardVirtualMemory(),那么与旧方法应该会有一些区别。

如果我想从 POSIX 移植一个使用madvise(2)和 的MADV_DONTNEED应用程序MADV_WILLNEED,模仿这种 POSIX 行为的最佳方法是什么?到目前为止,我使用VirtualAlloc()+ MEM_RESETforMADV_DONTNEED …

winapi posix memory-management virtual-memory windows-8.1

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

允许运算符重载的C#7'in'参数

最近添加到C#7非常棒,现在在最新版本中,我们可以通过使用new 关键字更有效地将ValueType(struct)实例传递给函数by-reference('by-ref')in.

在方法声明中使用in或使用或者ref意味着您可以避免struct为了保留按值语义而通常需要的整个额外的"memory-blt"副本.使用in,您可以获得此优势(将指针传递给源ValueType本身),但不同ref的是,不允许被调用者修改该目标(编译器强制执行).

除了提高设计意图的严谨性之外,in还有一个额外的好处,ref即调用站点语法比使用它更加轻松ref.实际上,您不需要in在呼叫站点提及关键字; 这是可选的.

无论如何,我注意到你显然可以使用-attributed arguments 来定义C#运算符重载in.

public static bool operator ==(in FILE_ID_INFO x, in FILE_ID_INFO y) => eq(in x, in y);
//       works:            -----^            -----^
Run Code Online (Sandbox Code Playgroud)

如果by-ref语义实际上在运行时行为中占优势,那么这很好.但我会发现这很令人惊讶,因为即使C#允许您in在方法调用中省略关键字,调用站点生成的代码也需要不同.即,它需要发射(例如)OpCodes.Ldflda而不是OpCodes.Ldfld等等.

然后还有一个事实是,运算符重载没有传统方法"调用站点",可以使用(尽管是可选的)in关键字进行修饰: …

c# parameter-passing value-type pass-by-reference

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

隐式转换为 Func 或 Action 委托?

C# 允许您定义对委托类型的隐式转换:

class myclass
{
    public static implicit operator Func<String, int>(myclass x)
    {
        return s => 5;
    }
    public static implicit operator myclass(Func<String, int> f)
    {
        return new myclass();
    }
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我们不能使用它来使对象看起来像函数:

var xx = new myclass();
int j = xx("foo");    // error
Action<Func<String, int>> foo = arg => { };
foo(xx);              // ok
Run Code Online (Sandbox Code Playgroud)

有没有一种好方法可以使自己的类的对象直接在其基本实例上接受函数样式参数(参数)?有点像索引器,但用括号而不是方括号?

c# delegates casting implicit func

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

在 WPF 中显示大文本的最佳方式?

我需要在WPF代码中显示大量的文本数据。首先,我尝试使用TextBox(当然渲染速度太慢)。现在我正在使用FlowDocument——而且它很棒——但最近我有另一个要求:文本不应该被连字符。据说它不是 ( document.IsHyphenationEnabled = false) 但我仍然没有看到我珍贵的水平滚动条。如果我放大比例文本是...连字符。

替代文字

public string TextToShow
{
    set
    {
        Paragraph paragraph = new Paragraph();
        paragraph.Inlines.Add(value);

        FlowDocument document = new FlowDocument(paragraph);
        document.IsHyphenationEnabled = false;

        flowReader.Document = document;
        flowReader.IsScrollViewEnabled = true;
        flowReader.ViewingMode = FlowDocumentReaderViewingMode.Scroll;
        flowReader.IsPrintEnabled = true;
        flowReader.IsPageViewEnabled = false;
        flowReader.IsTwoPageViewEnabled = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我创建 FlowDocument 的方式 - 这是我的 WPF 控件的一部分:

<FlowDocumentReader Name="flowReader" Margin="2 2 2 2" Grid.Row="0" />
Run Code Online (Sandbox Code Playgroud)

没有犯罪 =))

我想知道如何驯服这只野兽 - 谷歌搜索没有任何帮助。或者你有一些替代方法来显示兆字节的文本,或者文本框有一些我只需要启用的虚拟化功能。无论如何,我会很高兴听到您的回复!

wpf controls textview

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

如何在代码中设置FontFamily

我正在创建一个WPF应用程序,我需要使用自定义字体.创建了一个字体资源库,如此处所述http://msdn.microsoft.com/en-us/library/ms753303.aspx.示例显示如何在XAML中设置字体系列:

<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>
Run Code Online (Sandbox Code Playgroud)

如何在代码中设置字体系列?

wpf

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

处理阵列时我应该固定什么?

我正在尝试编写一个DynamicMethod来包装cpblk IL 操作码。我需要在 x64 平台上复制字节数组块,这应该是最快的方法。Array.Copy与Buffer.BlockCopy这两个工作,但我想探索的所有选项。

我的目标是将托管内存从一个字节数组复制到一个新的托管字节数组。我关心的是我如何知道如何正确“固定”内存位置。我不希望垃圾收集器移动数组并破坏所有内容。到目前为止它有效,但我不确定如何测试这是否是 GC 安全的。

// copying 'count' bytes from offset 'index' in 'source' to offset 0 in 'target'
// i.e. void _copy(byte[] source, int index, int count, byte[] target)

static Action<byte[], int, int, byte[]> Init()
{
    var dmethod = new DynamicMethod("copy", typeof(void), new[] { typeof(object),typeof(byte[]), typeof(int), typeof(int),typeof(byte[]) },typeof(object), true);
    var il = dmethod.GetILGenerator();

    il.DeclareLocal(typeof(byte).MakeByRefType(), true);
    il.DeclareLocal(typeof(byte).MakeByRefType(), true);
    // pin the source
    il.Emit(OpCodes.Ldarg_1);
    il.Emit(OpCodes.Ldarg_2);
    il.Emit(OpCodes.Ldelema, typeof(byte));
    il.Emit(OpCodes.Stloc_0);
    // pin …
Run Code Online (Sandbox Code Playgroud)

clr cil reflection.emit

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

C# 表达式主体成员上的方法属性

有没有办法在 C# 6 中指定表达式主体成员的属性AttributeTargets.Method ?考虑以下只读属性:

public bool IsLast { [DebuggerStepThrough] get { return _next == null; } }
Run Code Online (Sandbox Code Playgroud)

缩写的语法是:

public bool IsLast => _next == null;
Run Code Online (Sandbox Code Playgroud)

但似乎没有地方可以放置方法属性。以下均无效:

[DebuggerStepThrough]
public bool IsLast => _next == null;      // decorates property, not method

public bool IsLast => [DebuggerStepThrough] _next == null;    // error

public bool IsLast [DebuggerStepThrough] => _next == null;    // error
Run Code Online (Sandbox Code Playgroud)



[编辑:]建议这不是“在调试器中跳过表达式实体属性”的重复,因为这个问题通常询问任何适合方法的属性,而不仅仅是DebuggerStepThrough属性 - 此处仅作为示例给出 -尤其。

c# syntax attributes properties c#-6.0

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

如何更改 Visual Studio 2017“查找和替换”控件的字体大小?

请注意,这不是对话框,而是在文件窗口右上角打开的框。

在此输入图像描述

我检查了以下内容但没有找到答案。现在文字非常小,很难辨认!

  1. https://msdn.microsoft.com/en-us/library/139eef4h.aspx :找不到任何调整字体大小的说明。
  2. 菜单中的工具 -> 选项 -> 环境 -> 字体和颜色:找不到“查找和替换”控件。

放大编辑器的字体确实会使字体变大,但它不起作用,因为在控件的字体可读之前编辑器字体的大小就变得很大。

visual-studio-2017

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

从托管'ref'内部指针恢复包含GC对象

鉴于最新版本的C#7中新的ref locals和ref return功能,这个问题是新近相关的:

随着C#中托管变量或"内部" - 指针变量的突出和广泛使用,有时您可能需要为这样的指针恢复相应的包含 Pinnable GC对象.例如,如果要传递一个指向类型数组元素的托管指针T,则可能需要数组引用T[]本身才能调用(例如)Array.Copy(...).

所以,从托管代码,是否有任何合理合法以回收含GC对象句柄方式,给出以下两种流行内部的/管理的指针(ref,out,in)使用:

  1. 指向GC对象实例中(struct或class)字段的内部指针;
  2. 管理指向Array 的(struct或class)元素 T的指针T[].


在.NET内部,GC似乎使用以下函数:/ coreclr/master/src/gc/gc.cpp

#ifdef INTERIOR_POINTERS
// will find all heap objects (large and small)
uint8_t* gc_heap::find_object (uint8_t* interior, uint8_t* low)
{
    ....
Run Code Online (Sandbox Code Playgroud)

此代码遍历已知的GC堆,检查指定的内部指针是否落在已知GC对象分配的范围内.显然,这种方法不容易从最终用户托管代码中访问,而且据我所知,如果没有GC正在进行中,则可能甚至不相关.

我还查看了新的Span<T>和System.Memory库,但是找不到一系列可以恢复(例如)数组句柄的操作,如果你没有从第一个位置提供它(那时包含的句柄在那些中被squirleled)各种结构).如果_pinnable是可选的(例如Span<T> …

.net garbage-collection managed ref

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