小编Pau*_*enk的帖子

迭代器块在IL中生成try-fault

在尝试使用迭代器块之后,我注意到生成的IL代码不是我期望的那样.而不是try-finally块,生成了一个try-fault块,这是我从未见过的.我注意到编译器不允许我在'手写'C#中使用fault关键字.

2之间有什么区别吗?

C#代码:

static IEnumerable<string> ReadAllLines(string fileName)
{
    using (var file = System.IO.File.OpenText(fileName))
    {
        string s;
        while ((s = file.ReadLine()) != null)
        {
            yield return s;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MSIL代码:

.method private hidebysig newslot virtual final instance bool MoveNext() cil managed
{
    .override [mscorlib]System.Collections.IEnumerator::MoveNext
    .maxstack 3
    .locals init (
        [0] bool CS$1$0000,
        [1] int32 CS$4$0001,
        [2] string CS$0$0002,
        [3] bool CS$4$0003)
    L_0000: ldarg.0 

    // try body

    L_008d: leave.s L_0097
    L_008f: ldarg.0 
    L_0090: call instance void ConsoleApplication2.Program/<ReadAllLines>d__0::System.IDisposable.Dispose()
    L_0095: nop 
    L_0096: endfinally …
Run Code Online (Sandbox Code Playgroud)

.net c# cil

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

如何在代码中定义listview模板

我正在编写一个Composite控件,它包含一个listview来显示一个项目表.通常在Asp.NET中使用ListView时,我会在代码转发中定义模板.

<asp:ListView runat="server" ID="ArticleList">
    <LayoutTemplate>
        <div class="ContentContainer">
            <div runat="server" id="itemPlaceholder" />
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <div>
            <div><%# Eval("Content") %></div>
        </div>
    </ItemTemplate>
    </asp:ListView>
Run Code Online (Sandbox Code Playgroud)

我假设它是这样的:

ListView view = new ListView();
view.LayoutTemplate = .....
view.ItemTemplate = .....

// when do I call these?
view.DataSource = myDataSource;
view.DataBind();
Run Code Online (Sandbox Code Playgroud)

更新: 我通过实现ITemplate接口创建了2个模板:

private class LayoutTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
        var outer = new HtmlGenericControl("div");
        var inner = new HtmlGenericControl("div") { ID = "itemPlaceholder" };
        table.Rows.Add(row);

        container.Controls.Add(table);
    }
}

private class ItemTemplate : ITemplate …
Run Code Online (Sandbox Code Playgroud)

.net asp.net controls webforms

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

将 Jest 与异步服务器组件结合使用

我正在尝试测试一个 React 服务器组件,它返回一个 Promise。Jest 中的标准render方法不喜欢这样。

我检查了类似的问题,但所有问题都 > 4 岁,并且正在处理componentDidMount等。

/// Home.tsx
async function Home(props: Props) : Promise<JSX.Element> {
 // call async functions to setup component
}

/// home.test.ts
describe('Home', () => {
  it('renders a heading', () => {
     render(<Home />);
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:

'Home' can not be used as a JSX element
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题有什么建议吗?一个明显的解决方案是让组件不返回 Promise,但我正在编写代码来满足不理想的测试框架。

javascript reactjs jestjs react-testing-library

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

使用WriteCodeFragment MSBuild任务

我试图使用WriteCodeFragment MSBuild任务创建AssemblyVersion属性。我在创建属性组以正确传递处理所需的ITaskItem数组时遇到问题。有人可以帮忙一个例子。

msbuild msbuild-task msbuild-propertygroup visual-studio msbuild-4.0

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