使用-operator()进行常量模式匹配的文档说明:isexpr is constant
常量表达式的计算如下:
如果
expr和constant是整数类型,则C#相等运算符确定表达式是否返回true(即是否返回expr == constant)。否则,表达式的值由对静态
Object.Equals(expr, constant)方法的调用确定。
因此,使用此代码时
public bool IsZero(int value)
{
return value is 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它使用==运算符(情况1)并生成以下代码:
.method public hidebysig instance bool
IsZero(
int32 'value'
) cil managed
{
.maxstack 8
ldarg.1
ldc.i4.0
ceq
ret
}
Run Code Online (Sandbox Code Playgroud)
但是,实际上,将整数参数和常量(文字)装箱以便传递给静态Object.Equals方法(情况2):
.method public hidebysig instance bool
IsZero(
int32 'value'
) cil managed
{
.maxstack 8
ldc.i4.0
box [mscorlib]System.Int32
ldarg.1
box …Run Code Online (Sandbox Code Playgroud) 所以我有这个datagridview链接到绑定到底层数据表的绑定源.问题是我需要手动向datagridview添加行.
这在绑定时无法完成,因此我必须使用数据绑定.
如果我将行添加到基础数据表中,则在保存数据表时,行是重复的,可能是因为绑定源以某种方式获得了副本并将其插入.
将它添加到绑定源是我一直在尝试做但但它不是很有效.
让我解释一下我的设置是什么:
我有一个包含两个表的数据库:CashReceiptTable和CashReceiptItemsTable
CashReceiptItemsTable包含FK到CashReceiptTable.
该表单允许用户添加和修改这两个表.
当用户输入新的cashreceipt时,现金收据的id为-1,cashReceiptitemstable中的FK为-1.保存数据库时,cashReceipt的id已更新,我必须手动更新cashreceiptitem的FK.
以下是问题:
当我尝试在cashreceiteitems绑定源中的多行中更新CashReceiptID(FK)时,第一行被更新,并且消失(因为它被过滤),其他行被删除,我无法再访问它们.
我不知道为什么会这样,我还没有更新过滤器,所以他们应该仍然在那里,但尝试访问它们会抛出RowNotInTableException.
我已经管理了一个工作,它将绑定源中的行复制到内存数组中,删除绑定源中的第一行(所有其他行只是消失),更新行的FK并将它们重新插入绑定源并保存表格.
这没关系,但为什么行会消失?
我还有一个小问题.当CashReceiptsTable为空并且我向其添加新行时,如果我向CashReceiptsItemTable添加多行,则会导致问题.手动将项目添加到绑定源时,添加新行将弹出到上一行并将其推送到数据表.这隐藏了我的FK更新例程,它丢失了,它也将它从DataGridView中删除.
当我将第一行添加到CashReceiptsTable时,它才会这样做.为什么会这样做,我该如何解决?
我发布了我的代码,在这里自动填充它:
private void autopopulate(decimal totalPayment) {
//remove old rows
for (int i = 0; i < tblCashReceiptsApplyToBindingSource.List.Count; i++) {
DataRowView viewRow = tblCashReceiptsApplyToBindingSource.List[i] as DataRowView;
RentalEaseDataSet.tblCashReceiptsApplyToRow row = viewRow.Row as RentalEaseDataSet.tblCashReceiptsApplyToRow;
if (row.CashReceiptsID == this.ReceiptID) {
tblCashReceiptsApplyToBindingSource.List.Remove(viewRow);
i--;
}
}
decimal payment = totalPayment;
//look for an exact amount
foreach (DataGridViewRow dueRow in dataViewDueRO.Rows) {
decimal due = -1 * (Decimal)dueRow.Cells[Due.Index].Value;
if …Run Code Online (Sandbox Code Playgroud) 我为我的DataGridView对象设置了
AllowUserToOrderColumns = true;
Run Code Online (Sandbox Code Playgroud)
如何检测重新排序的列?
以前从未有过这样做的问题,但是今天,当我运行命令时Install-Package Microsoft.EntityFrameworkCore,以下错误确保了:
NU1107: Version conflict detected for Microsoft.EntityFrameworkCore.Abstractions. Install/reference Microsoft.EntityFrameworkCore.Abstractions 2.2.1 directly to
project WebApplication1 to resolve this issue.
WebApplication1 -> Microsoft.EntityFrameworkCore 2.2.1 -> Microsoft.EntityFrameworkCore.Abstractions (>= 2.2.1)
WebApplication1 -> Microsoft.AspNetCore.App 2.1.1 -> Microsoft.EntityFrameworkCore.Abstractions (>= 2.1.1 && < 2.2.0).
At line:1 char:1
+ Install-Package Microsoft.EntityFrameworkCore
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], Exception
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
Install-Package : Package restore failed. Rolling back package changes for 'WebApplication1'.
At line:1 char:1
+ Install-Package Microsoft.EntityFrameworkCore
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo …Run Code Online (Sandbox Code Playgroud) 我在 asp net core mvc 中的十进制数字方面遇到了一些问题。我通过将其添加到 web.config 来使其在常规 ASP Net 应用程序中工作:
<system.web>
...
<globalization uiCulture="en" culture="en-US"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)
但是,由于核心应用程序中没有 web.config,我不太确定该怎么做。核心中最接近的近似值会是什么样子?
我正在进行耀斑挑战(Memecat Battlestation),所以我决定这样做。绕过它,演示共享软件被绕过了,但是标志损坏了,所以我想我应该尝试完整版,我尝试完整版但我有一个错误
这是第一个Flare-On挑战,名为Memecat Battlestation,我运行的是Windows 7 64位,错误在VictoryForm.cs中
private static IEnumerable<byte> AssignFelineDesignation(byte[] cat, IEnumerable<byte> data)
{
byte[] s = BattleCatManagerInstance.InvertCosmicConstants(cat);
int i = 0;
int j = 0;
return data.Select(delegate (byte b)
{
i = (i + 1 & 255);
j = (j + (int)s[i] & 255);
BattleCatManagerInstance.CatFact(s, i, j);
return b ^ s[(int)(s[i] + s[j] & byte.MaxValue)];
});
}
Run Code Online (Sandbox Code Playgroud)
我曾期望它可以在没有任何错误的情况下进行构建,但是我遇到了以下错误:
'无法将类型'
System.Collections.Generic.IEnumerable<int>' 隐式转换为'System.Collections.Generic.IEnumerable<byte>'。存在显式转换(您是否缺少演员表?)'
我调用一个函数(SaveChanges)来访问我的业务/数据层,并将所有更改保存到标记为添加或更新并标记为要处理的字段.此功能用于在60多分钟前完成工作.
发生的事情是突然该函数返回false.在通过代码调试之后,当它命中Return时,本地布尔值设置为True ...但是当它返回到调用方法(并使用返回值)时,它现在是False.
正如我所说,我逐行检查并调试它,然后我添加了一块手表.有趣的是,有一个点将布尔值设置为false,当我在该点放置一个断点时,它永远不会到达.
这是功能:
Private Function SaveChanges() As Boolean
Dim blnSaved As Boolean = True
Dim saveableRows As List(Of DataRow) = (From d As DataRow In _listData.Tables(0).Rows _
Where Not d("Marking") = "Duplicate" _
And d("Process") = True _
Select d).ToList()
If saveableRows.Count > 0 Then
For Each drRow As DataRow In saveableRows
Dim data As IDataEntity = DataEntities.GetData(_tableName)
If drRow("Marking") = "Update" Then
'UPDATE
data.UpdateItem(drRow.ItemArray)
Else
'ADD
data.AddItem(drRow.ItemArray)
End If
If data.HasErrors Then
blnSaved = False 'Never reaches …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
datagridview ×2
winforms ×2
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
boxing ×1
data-binding ×1
vb.net ×1