小编Ark*_*kun的帖子

如何在iOS下动态加载字体.(真的)

我已经看过这个问题并且多次回答,但我没有看到真正的答案.常见的"解决方案"是:

  • 将字体添加到应用程序包并将其注册到info.plist文件中.
  • 使用自定义字体解析和渲染库(如Zynga的FontLabel).
  • 它无法完成.

所以问题是:如何在iOS下动态加载字体? "动态"加载字体意味着加载在应用程序编译时未知的任何给定字体.

fonts dynamic truetype ios

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

如何在 JavaScript 中逐行读取文本文件?

我需要用 JavaScript 逐行读取文本文件。

我可能想对每一行做一些事情(例如跳过或修改它)并将该行写入另一个文件。但具体行动超出了这个问题的范围。

有很多类似措辞的问题,但大多数实际上是一步将整个文件读取到内存中,而不是逐行读取。因此这些解决方案不适用于较大的文件。

javascript file-io node.js

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

在WPF中仅使用XAML将元素定位在"画布"中的中心(而不是左上角)

关于在a中定位元素的常见问题Canvas是"如何定位元素的中心(而不是左上角)".

提出了几种解决方案,但它们都有缺点.

最简单的解决方案是在以编程方式设置Canvas.LeftCanvas.Top属性期间适应元素大小.这有效,但只有一次.此解决方案不支持绑定,并且在元素大小更改时会中断.您也无法设置Canvas.LeftCanvas.Top使用

另一套方案涉及转换的转换利用两种RenderTransformMargin.这些解决方案需要将一些属性绑定到-0.5 * Width-0.5 * Height.这种绑定需要创建自定义ValueConverter,并且不可能仅使用XAML创建.

那么,是否有一种简单的方法可以在画布中定位元素,使其Canvas.LeftCanvas.Top元素的中心对应,并且大小和位置属性都可以绑定到其他属性?

wpf xaml canvas centering

13
推荐指数
1
解决办法
9476
查看次数

为什么C#无法从非泛型静态方法的签名推断泛型类型参数类型?

我进行了以下推理测试:

static class InferenceTest {
    static void TakeInt(int a) { }
    static int GiveInt() { return 0; }
    static int TakeAndGiveInt(int a) { return 0; }

    static void ConsumeAction1<T>(Action<T> a) { }
    static void ConsumeFunc1<T>(Func<T> f) { }
    static void ConsumeFunc2a<T1, T2>(Func<T1, T2> f) { }
    static void ConsumeFunc2b<T>(Func<int, T> f) { }
    static void ConsumeFunc2c<T>(Func<T, T> f) { }
    static void ConsumeFunc1Func2<T1, T2>(Func<T1> f1, Func<T1, T2> f2) { }

    static void Main() {
        ConsumeAction1(TakeInt);        //error
        ConsumeFunc1(GiveInt);          //ok
        ConsumeFunc2a(TakeAndGiveInt);  //error …
Run Code Online (Sandbox Code Playgroud)

c# generics type-inference

11
推荐指数
1
解决办法
965
查看次数

.Net在哪里存储泛型类型的静态字段的值?

以下代码允许我为每种类型存储一个值T:

public static class MyDict<T> {
    public static T Value;
}
Run Code Online (Sandbox Code Playgroud)

我可以存储尽可能多的值,并且编译器之前不知道我要使用的类型.这些静态字段值的存储方式和位置在哪里?

更新:显然它存储在内存中,但我想知道这个内存.是堆吗?它是一些特殊的CLR内存吗?怎么称呼?还有什么方式存储?

更新2:JITter MyDict<__Canon>为所有引用类型参数生成单个实现MyDict<T>.然而,这些值是分开存储的.我猜每个类型参数仍然有一些per-type-argument结构,而当vtable链接到JITted时MyDict<__Canon>,字段是分开的.我对吗?

.net c# jit

10
推荐指数
2
解决办法
1009
查看次数

在C#中使用免费泛型类型参数模拟委托

这是一个关于语言设计,模式和语义的难题.请不要因为你没有看到实际价值而进行投票.

首先,让我们考虑一下函数及其参数.然后我们将看看函数与它们的参数/参数和泛型类/函数及其类型参数/类型参数之间的类比.

函数是代码块,带有一些未指定的值,称为" 参数 ".您提供参数并接收结果.

泛型类是具有一些未指定的" 类型参数 "的类.您提供了类型参数,然后您可以使用该类 - 调用构造函数或调用静态方法.

通用功能在非泛型类是具有一些未指定"的功能类型参数 "和一些未指定" 值参数 ".您提供了type-argumentsvalue-arguments来接收结果.

代表是指向特定功能的指针.创建委托时,不要指定函数参数,而是稍后提供它们.

问题是.Net没有与具有未指定泛型类型参数的泛型函数相当的Delegates .您以后不能为type-parameters提供类型值.我们可以想象代理不仅有自由值参数,还有自由类型参数.

static class SomeClass {
    //generic function
    public static T GetValue<T>() {
        return default(T);
    }
}

//creating delegate to generic function or method group
Func{TFree}<TFree> valueFactory = SomeClass.GetValue;

//creating delegate to anonymous generic function
Func{TFree}<int, List<TFree>> listFactory = {TFree}(int …
Run Code Online (Sandbox Code Playgroud)

c# generics delegates function-pointers strong-typing

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

使"修改时枚举"集合成为线程安全的

我想创建一个可以在枚举时修改的线程安全集合.

示例ActionSet类存储Action处理程序.它具有Add向列表添加新处理程序的Invoke方法以及枚举和调用所有收集的操作处理程序的方法.预期的工作方案包括非常频繁的枚举,在枚举时偶尔会进行修改.

如果Add在枚举未结束时使用该方法修改它们,则正常集合会抛出异常.

这个问题有一个简单但缓慢的解决方案:在枚举之前克隆集合:

class ThreadSafeSlowActionSet {
    List<Action> _actions = new List<Action>();

    public void Add(Action action) {
        lock(_actions) {
            _actions.Add(action);
        }
    }

    public void Invoke() {
        lock(_actions) {
            List<Action> actionsClone = _actions.ToList();
        }
        foreach (var action in actionsClone ) {
            action();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题是枚举开销,我希望枚举非常快.

我创建了一个相当快速的"递归安全"集合,允许在枚举时添加新值.如果_actions在枚举主集合时添加新值,则会将值添加到临时_delta集合而不是主集合中.完成所有枚举后,将_delta值添加到_actions集合中.如果_actions在枚举主集合时添加一些新值(创建_delta集合),然后再次重新输入Invoke方法,我们必须创建一个新的合并集合(_actions+ _delta)并替换_actions它.

所以,这个集合看起来"递归安全",但我想让它具有线程安全性.我认为我需要使用Interlocked.*构造,类System.Threading和其他同步原语来使这个集合线程安全,但我不知道如何做到这一点.

如何使这个集合线程安全? …

.net c# collections concurrency thread-safety

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

为什么我要做`sys.stdin = codecs.getreader(sys.stdin.encoding)(sys.stdin)`?

我正在编写一个python程序,其中包含所有输入(替换非工作tr '[:lowers:]' '[:upper:]').语言环境是ru_RU.UTF-8,我PYTHONIOENCODING=UTF-8用来设置STDIN/STDOUT编码.这正确设置sys.stdin.encoding.那么,为什么我仍然需要显式创建解码包装器,如果sys.stdin已经知道编码?如果我不创建包装阅读器,该.upper()功能将无法正常工作(对非ASCII字符不执行任何操作).

import sys, codecs
sys.stdin = codecs.getreader(sys.stdin.encoding)(sys.stdin) #Why do I need this?
for line in sys.stdin:
    sys.stdout.write(line.upper())
Run Code Online (Sandbox Code Playgroud)

如果不使用它为什么stdin会有.encoding

python encoding locale

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

从TypeSymbol获取TypeSyntax.我真的需要重新解析这个名字吗?

我想TypeSyntaxTypeSymbol.基于来自ITypeSymbol问题的Get TypeSyntax的答案,我的解决方案Syntax.ParseTypeName(typeSymbol.ToDisplayString())看起来不太好.

有更直接的解决方案吗?

roslyn

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

在Silverlight/WinRT中仅使用XAML将元素定位在"画布"中的中心(而不是左上角)

关于在a中定位元素的常见问题Canvas是"如何定位元素的中心(而不是左上角)".

提出了几种解决方案,但它们都有缺点.

是否有一个简单的(仅限XAML)方法将一个元素放在画布中,以便它Canvas.LeftCanvas.Top元素的中心对应,并且大小和位置属性都可以绑定到其他一些属性?

我在WPF中找到了一种非常简单的方法(仅Margin="-1000000" 使用WPF中的XAML设置在Canvas内部定位元素(而不是左上角)),但它不适用于Silverlight/WinRT .我知道的唯一其他方法需要创建ValueConverter才能执行x *= -0.5计算(不仅仅是XAML).

silverlight xaml canvas centering windows-runtime

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