小编Ani*_*Ani的帖子

Roslyn流畅的语法为多行lambda创建表达式树

我正在编写一个基于Roslyn的自定义工具,它试图通过在构建时将给定的多行lambda重写为Expression树来消除CS0834.

编辑:目前,我只针对匿名多行lambdas.

例如:

    // Will produce CS0834 if Bar takes Expression<Action<...>>
    Foo.Bar((int x) => { ... });
Run Code Online (Sandbox Code Playgroud)

    Foo.Bar(Expression.Lambda<Action<int>>(
        Expression.Block(
            ...
            ),
        Expression.Parameter(typeof(int))));
Run Code Online (Sandbox Code Playgroud)

这样就可以正确编译了.虽然我可以找出转换给定代码所需的Expression.(blah)语法,但使用Roslyn完成它是另一回事.也许我只是不知道Roslyn Syntax.(blah)API足以翻译这个原始的lambda

    (int index, float[] a, float[] b) =>
    {
        var sum = 0f;
        for (int i = 0; i < index; i++)
            sum += a[i];

        b[index] = sum;
    });
Run Code Online (Sandbox Code Playgroud)

有人可以帮我写Roslyn Syntax.(blah)语法,它会生成一个类似下面的表达式树吗?

    Expression<Action<int, float[], float[]>> action = 
        Expression.Lambda(
            Expression.Block(
                Expression.Assign(sumParameter, Expression.Constant(0)),
                Expression.Loop(...) // The for loop here
                )
            );
Run Code Online (Sandbox Code Playgroud)

一旦我有了一个起点 - 我应该能够弄清楚或者至少开始翻译这个项目中的简单案例.

非常感谢,非常感谢您的帮助.

.net c# metaprogramming expression-trees roslyn

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

如何在MacOS上将MonoGame项目模板添加到MonoDevelop?

根据自述文件,我应该这样做

  1. 关闭MonoDevelop
  2. 找到您的MonoDevelop AppBundle
  3. 右键单击它并选择"显示包内容"
  4. 按Alt并将目录MonoDevelop.MonoGame.2.5拖放到../Contents/MacOS/lib/monodevelop/AddIns/

我做了哪些 - 但我仍然没有在MonoDevelop中看到项目模板.我也在这里查看了这些其他问题,这里还有一些关于谷歌的问题 - 但没有发现任何人都有模板可以工作(大多数人都使用了手工编辑其他此类模板项目或编辑MonoTouch OpenGL项目的解决方法) ).

任何帮助将不胜感激,谢谢!

macos monodevelop xamarin.ios monogame

10
推荐指数
0
解决办法
2192
查看次数

匿名lambda参数的自定义属性

([MyCustomAttribute(...)] param1, param2) =>
{
    ...
Run Code Online (Sandbox Code Playgroud)

其中param1是Type1,param2是Type2

在我看来,这完全一样

private void method blah([MyCustomAttribute(...)] Type1 param1, Type2 param2)
{
    ...
Run Code Online (Sandbox Code Playgroud)

但是C#编译器不允许使用第一个版本.为什么?这是另一个时间与努力/回报的事情吗?这不是简单的不一致吗?

c#

8
推荐指数
2
解决办法
689
查看次数

DirectX 渲染到纹理

我正在尝试将我的场景渲染为纹理,以便在着色器中使用它来实现一些后期处理效果。我对这类东西不是很有经验,所以我在这里有一些问题..首先:

我的 OnCreateDevice() 方法中有此代码:

    D3D11_TEXTURE2D_DESC textureDesc;
    D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
    D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;

    ZeroMemory(&textureDesc, sizeof(textureDesc));

    textureDesc.Width = 800/2;
    textureDesc.Height = 600/2;
    textureDesc.MipLevels = 1;
    textureDesc.ArraySize = 1;
    textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
    textureDesc.SampleDesc.Count = 1;
    textureDesc.Usage = D3D11_USAGE_DEFAULT;
    textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
    textureDesc.CPUAccessFlags = 0;
    textureDesc.MiscFlags = 0;


    pd3dDevice->CreateTexture2D(&textureDesc, NULL, &renderTargetTextureMap);


    renderTargetViewDesc.Format = textureDesc.Format;
    renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
    renderTargetViewDesc.Texture2D.MipSlice = 0;


    pd3dDevice->CreateRenderTargetView(renderTargetTextureMap, &renderTargetViewDesc, &renderTargetViewMap);

    shaderResourceViewDesc.Format = textureDesc.Format;
    shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
    shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
    shaderResourceViewDesc.Texture2D.MipLevels = 1;


    pd3dDevice->CreateShaderResourceView(renderTargetTextureMap, &shaderResourceViewDesc, &shaderResourceViewMap);
Run Code Online (Sandbox Code Playgroud)

我正在创建一个纹理、一个渲染视图和一个资源视图。但是我该从哪里开始呢?我是否必须定义另一个缓冲区或者这是否有效?

具体来说,

所以我想我知道我必须使用以下方法设置 OMRenderTargets:renderTargetViewMap 和 depthStencilView。但是我必须在哪里设置它?在每一帧渲染调用中?在我渲染场景中的其他对象之前或之后?我的猜测是我必须制作一个新的着色器,我将创建的这个纹理用于​​它。 …

c++ directx textures

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

Github Codespaces - 无法从存储库检测到平台/语言

我正在尝试使用 Github Codespaces打开此存储库。请注意,此存储库已针对本地devcontainer开发正确配置

但是,当我尝试在 CodeSpaces 中打开它时,它似乎正确构建了容器,但失败了:(Could not detect any language/platform in the source directory完整日志此处

我缺少什么?

codespaces vscode-devcontainer

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

在Android中获取专辑封面的最强大方法

请注意,我已经在这里和其他网站上遇到了类似的问题和答案.我也有一个适用于某些设备的解决方案(我的G2X运行CyanogenMod 7.1,我妻子的HD2运行自定义ROM,运行Android 2.1的模拟器).然而,它并没有在我的Nook上运行CyanogenMod.

我的问题是:在所有Android设备上获取专辑封面的最强大和最通用的方法是什么?对于特定设备,版本或音乐应用程序有什么问题(我不是指第三方播放器,我的意思是Google音乐与旧音乐客户端)?我目前的代码是:

// Is this what's making my code fail on other devices?
public final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");

// This works, and well on all devices
private int[] getAlbumIds(ContentResolver contentResolver)
{
    List<Integer> result = new ArrayList<Integer>();
    Cursor cursor = contentResolver.query(MediaStore.Audio.Media.getContentUri("external"), new String[]{MediaStore.Audio.Media.ALBUM_ID}, null, null, null);

    if (cursor.moveToFirst())
    {
        do{
            int albumId = cursor.getInt(0);
            if (!result.contains(albumId))
                result.add(albumId);
        } while (cursor.moveToNext());
    }

    int[] resultArray = new int[result.size()];
    for (int i = 0; i < result.size(); i++)
        resultArray[i] = result.get(i); …
Run Code Online (Sandbox Code Playgroud)

java android albumart

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

现代GPU上的纹理变化(和其他状态变化)成本

我正在编写一个基于场景图的图形引擎,用于建模目的.我正在使用XNA 4.在我阅读的许多地方,渲染过程中应该最小化纹理变化(以及其他状态变化)(因此我必须按材料来订购我的基元等).

我在XNA 4中创建了一个小型测试应用程序,它使用单个纹理渲染数百个斯坦福兔子模型,然后切换2个不同的纹理.渲染时间没有差异(但是我使用了小~100x100纹理).

所以我的问题是:

  • 我真的应该关心通过纹理/颜色/其他材料参数对基元进行排序吗?或者它在现代GPU上不太重要?
  • 如果不这样做,可预期的绩效损失百分比是多少?
  • 是否还有其他状态变化会影响性能?
  • 我在哪里可以找到关于此的最新文献/最佳实践指南?

感谢您的帮助或链接!

directx 3d xna gpu direct3d

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

无需安装Boost(Boost CMake Modularization)即可在CMake中轻松使用Boost

似乎已经/正在努力做到这一点,但到目前为止我看到的大部分资源要么已经过时(带有死链接),要么几乎没有信息来实际构建一个小的工作样本(例如依赖于提升program_options构建可执行文件).

此外,在使用时ExternalProject_Add,如何解决Boost内部的依赖关系?

我基本上希望在CMake中轻松使用Boost,几乎没有手动配置.

boost cmake

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

解决方法将默认的无参数构造函数添加到结构中

让我来描述我的问题 - 我有一个包含非托管句柄的结构(让我们称之为Mem).每当复制时,我都需要这个句柄来调用一个特定的方法(比如说"保留"或者保持引用计数).

换句话说,我需要一个在内部维护引用计数的结构(我在外部也有一个机制,但需要一种方法来调用该机制).

不幸的是,C#不允许我以任何方式这样做.

我也不能使Mem成为一个类,因为我将这些结构的数组传递给非托管代码,我不希望在传入它们之前逐个转换它们(只是引脚和传递).

有没有人知道可以应用于添加此行为的任何变通方法(IL Weaving等)?我相信IL不会阻止我这样做,只有C#,对吗?

我很乐意回答有关框架和限制的任何问题,但我不是在寻找 - "请改变你的设计""不要使用C#这个"答案,非常感谢.

.net c# il unmanaged

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