小编Ton*_*ams的帖子

为什么is-operator导致不必要的装箱?

使用-operator()进行常量模式匹配的文档说明:isexpr is constant

常量表达式的计算如下:

  1. 如果exprconstant是整数类型,则C#相等运算符确定表达式是否返回true(即是否返回expr == constant)。

  2. 否则,表达式的值由对静态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)

c# boxing

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

DataBinding很难过

所以我有这个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)

.net c# data-binding datagridview winforms

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

DataGridView处理列重新排序事件

我为我的DataGridView对象设置了

AllowUserToOrderColumns = true;
Run Code Online (Sandbox Code Playgroud)

如何检测重新排序的列?

.net c# datagridview

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

无法在ASP.NET Core项目中安装Microsoft.EntityFrameworkCore

以前从未有过这样做的问题,但是今天,当我运行命令时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)

entity-framework entity-framework-core asp.net-core-2.1

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

如何在 ASP.Net Core 中设置全球化文化?

我在 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,我不太确定该怎么做。核心中最接近的近似值会是什么样子?

asp.net asp.net-mvc asp.net-web-api asp.net-core

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

如何修复C#中的“无法隐式转换类型”错误?

我正在进行耀斑挑战(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>'。存在显式转换(您是否缺少演员表?)'

c#

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

函数返回true,但在赋值时它变为false

我调用一个函数(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)

vb.net winforms

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