在尝试使用迭代器块之后,我注意到生成的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) 我正在编写一个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) 我正在尝试测试一个 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,但我正在编写代码来满足不理想的测试框架。
我试图使用WriteCodeFragment MSBuild任务创建AssemblyVersion属性。我在创建属性组以正确传递处理所需的ITaskItem数组时遇到问题。有人可以帮忙一个例子。
msbuild msbuild-task msbuild-propertygroup visual-studio msbuild-4.0
.net ×2
asp.net ×1
c# ×1
cil ×1
controls ×1
javascript ×1
jestjs ×1
msbuild ×1
msbuild-4.0 ×1
msbuild-task ×1
reactjs ×1
webforms ×1