小编Dmi*_*tsa的帖子

转换为动态类型变量的通用列表

我需要更改Capacity类型的动态变量的属性List<*DynamicType*>.问题是Activator返回object-casted变量如果没有指定变量类型而不是正确的List<*DynamicType*>,我能做的最好的就是将其强制转换为IList:

DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我发现只有一个黑客:

dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;
Run Code Online (Sandbox Code Playgroud)

虽然这在我的情况下是可以接受的,但我想知道是否还有另一种方法可以做到这一点.

c# generics types casting dynamic

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

这个背景意味着什么:( Monad m,(〜)*a())?

我找到了以下类实例:(Monad m, (~) * a ()) => LaTeXC (LaTeXT m a)但不能完全理解它的上下文.

什么(~) * a ()意思?我在哪里可以阅读它?

haskell

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

带自定义格式的XML编写器

我需要创建一个人类可读的XML文件.XmlWriter似乎对此几乎是完美的,但我想插入换行符,或者一般来说,我想要它们的自定义空格.WriteRawWriteWhitespace似乎都不能在元素中的属性之间起作用.后者看起来应该工作(此方法用于手动格式化您的文档),但抛出InvalidOperationException(状态元素内容中的Token StartAttribute将导致无效的XML文档),如果用于代替下面的注释.

是否有XmlWriter或支持此功能的第三方XML库的解决方法?

示例代码(LINQPad语句就绪):

var sb = new StringBuilder();
var settings = new XmlWriterSettings {
    OmitXmlDeclaration = true,
    Indent = true,
    IndentChars = "  ",
};
using (var writer = XmlWriter.Create(sb, settings)) {
    writer.WriteStartElement("X");
    writer.WriteAttributeString("A", "1");
    // write line break
    writer.WriteAttributeString("B", "2");
    // write line break
    writer.WriteAttributeString("C", "3");
    writer.WriteEndElement();
}
Console.WriteLine(sb.ToString());
Run Code Online (Sandbox Code Playgroud)

实际结果:

<X A="1" B="2" C="3" />
Run Code Online (Sandbox Code Playgroud)

期望的结果(B和C可能不与A对齐 - 那很好,/>可以留在C上的线上):

<X A="1"
   B="2"
   C="3"
/>
Run Code Online (Sandbox Code Playgroud)

c# xml formatting

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

无法使用( - >)r monad使用SDL2渲染

我有一个小的工作SDL2示例(C++教程的简单端口),我正在尝试使用( - >)r monad重构渲染代码.这是没有重构的样本的工作部分

renderClear renderer
renderCopy renderer texture nullPtr nullPtr
renderPresent renderer
Run Code Online (Sandbox Code Playgroud)

制作和运行 - 纹理就在那里.都

renderClear renderer
flip ($) renderer $ do
    copy texture nullPtr nullPtr
renderPresent renderer
Run Code Online (Sandbox Code Playgroud)

renderClear renderer
renderCopy renderer texture nullPtr nullPtr
flip ($) renderer $ do
    present
Run Code Online (Sandbox Code Playgroud)

工作也很好.然而

renderClear renderer
flip ($) renderer $ do
    copy texture nullPtr nullPtr
    present
Run Code Online (Sandbox Code Playgroud)

只是绘制黑色窗口就是这样.present是的别名renderPresentcopyrenderCopy与第一个参数转移到结束.这与使用IO的这些功能有关吗?我怎样才能解决这个问题?

io monads haskell sdl sdl-2

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

结合两个curried函数

假设我们有两个类型的函数(a -> b -> c).我希望有一个单一的功能,其中,当应用于ab将给予d,从合并c由一个特定的功能(c -> c -> d).我用箭头想出了这个解决方案:

combine :: (a -> b -> c) -> (a -> b -> c) -> (c -> c -> d) -> (a -> b -> d)
combine f g op = ((uncurry op) .) . (uncurry (&&&)) . (f &&& g)
Run Code Online (Sandbox Code Playgroud)

有没有办法以更优雅的方式做到这一点,或者将其概括为适用于更大的功能(例如(a -> b -> c -> d) -> (a -> b -> c -> d) -> (d -> …

haskell higher-order-functions

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

标签 统计

haskell ×3

c# ×2

casting ×1

dynamic ×1

formatting ×1

generics ×1

higher-order-functions ×1

io ×1

monads ×1

sdl ×1

sdl-2 ×1

types ×1

xml ×1