小编max*_*llb的帖子

C#:显式地调用一个事件处理程序真是"一件好事"吗?

此问题与C#有关,但也可能适用于其他语言.我预计不会使用以下代码:

using System.Windows.Forms;

class MyForm : Form
{
    private Timer myTimer;
    private Button myButton;

    public MyForm()
    {
        // Initialize the components, etc.

        myTimer.Tick += new EventHandler( myTimer_Tick );
        myButton.Click += new EventHandler( myButton_Click );

        myTimer.Start();
    }

    private void myTimer_Tick( object sender, EventArgs eventArgs )
    {
        myTimer.Stop();
        // also, I see a lot of usage of 
        // Timer.Enabled = true/false instead of -^
        myButton_Click( this, ea /* or event EventArgs.Empty, or null */ );
        return;
    }

    private void myButton_Click( object sender, …
Run Code Online (Sandbox Code Playgroud)

.net c# formatting coding-style

14
推荐指数
3
解决办法
2万
查看次数

关闭脚本时,fs.writeFile()会写入[object,object]而不是实际对象

我的脚本需要从JSON文件读取和写入.这没有问题.我在本地复制文件,编辑对象,然后将它们写回文件.但是,当我使用Ctrl + C关闭脚本并检查我的文件时,它[object, object]不是应该存在的实际对象.这不是每次都发生,但是很烦人,因为我的脚本依赖于这个文件.

有关如何防止这种错误关闭读者的任何想法?我在写作之前已经尝试检查类型,但它似乎没有多大帮助.

function writeConfig(obj) {
    fs.writeFile('./config.json', obj, function (err) {
        if (err) console.log(err);
    });
}
Run Code Online (Sandbox Code Playgroud)

object filewriter fs node.js

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

如何通过代码执行XUnit测试

我有使用InlineData和MemberData属性在XUnit中编写的测试.我想通过我项目中其他地方的代码运行测试,并让属性自动填充测试数据,就像通常在VS测试运行器中运行时一样.

如果它不是属性,我会像任何其他常规方法一样直接调用方法.断言仍然被检查,它运行正常.但是,如果我直接调用具有属性的方法,则忽略属性,并且必须通过代码手动提供所有测试数据.在XUnit中是否有某种类型的测试运行器类可以重用来实现这一目标?我一直试图挖掘他们的API无济于事.

为什么我要这样做会得到一些解释,但请耐心等待.我正在针对特定接口而不是具体实现编写测试(例如,考虑标准集合接口).那里有足够的测试,我不想为每个具体的实施者复制粘贴它们(可能是几十个).我编写测试一次,然后将接口的每个具体实现作为测试的第一个参数传递,这是一个要测试的主题.

但这留下了一个问题.XUnit看到了测试并希望运行它,但它不能,因为在这一层没有具体的实现,只有接口.所以我想在更高层编写测试,只是新建具体实现,然后调用传递新主题的接口测试.我可以轻松地为只接受1个参数的测试做主题,但是对于我正在使用InlineData或MemberData的测试,我想重用已经提供的测试用例,并且只是将主题添加为第一个参数.

c# xunit xunit.net

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

操作方法:在C#中实现短路反向三元运算符?有关系吗?

假设您正在使用三元运算符或空合并运算符或嵌套的if-else语句来选择对象的赋值.现在假设在条件语句中,您对昂贵或易失性操作进行了评估,要求将结果放入临时变量中,捕获其状态,以便可以对其进行比较,然后进行可能的分配.

一个语言(如C#)如何实现一个新的逻辑运算符来处理这种情况?应该是?在C#中是否存在处理此案例的现有方法?其他语言?

例如,当我们假设我们正在寻找直接比较时,已经克服了一些降低三元或零合并算子的冗长度的情况.请参阅使用Null Coalescing运算符的唯一方法,特别是关于如何扩展运算符的使用以支持的讨论String.IsNullOrEmpty(string).注意Jon Skeet如何使用PartialComparerfrom MiscUtil,将0s 重新格式化为nulls,

为什么这可能是必要的?那么,看看我们如何为没有任何快捷方式的复杂对象编写比较方法(引用的讨论中的示例):

public static int Compare( Person p1, Person p2 )
{
    return ( (result = Compare( p1.Age, p2.Age )) != 0 ) ? result
        : ( (result = Compare( p1.Name, p2.Name )) != 0 ) ? result
        : Compare( p1.Salary, p2.Salary );
}
Run Code Online (Sandbox Code Playgroud)

Jon Skeet写了一个新的比较来回避平等案例.这允许通过编写一个返回null的新特定方法来扩展表达式,允许我们使用null合并运算符:

return PartialComparer.Compare(p1.Age, p2.Age)
    ?? PartialComparer.Compare(p1.Name, p2.Name)
    ?? PartialComparer.Compare(p1.Salary, p2.Salary)
    ?? 0;
Run Code Online (Sandbox Code Playgroud)

空合并运算符更具可读性,因为它有两个边,而不是三个边.布尔条件子句分为一个方法,在这种情况下返回null表达式必须继续.

如果我们可以更容易地将条件置于线上,那么上面的表达式会是什么样的?获取 …

c# language-features language-design

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

对象引用未设置为对象的实例由DBNull.Value引起

SqlCommand objsql = new SqlCommand();
.
.
objsql.Parameters.AddWithValue("@Param1", DBNull.Value);
.
.
.
Run Code Online (Sandbox Code Playgroud)

我收到一个特殊的错误:

"你调用的对象是空的"

如果我做:

objsql.Parameters.AddWithValue("@PaymentMethodID", null);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:参数化查询'(@SupplierQuoteID int,@ PaymentMethodID nvarchar(4000),@ DueDate d'需要参数'@PaymentMethodID',这是未提供的."}

PaymentMethodID是表中的一列,取空值.

此错误发生在这里:

string valHolder = null;
valHolder = objSqlCommand.ExecuteScalar().ToString(); 
singleValue = Convert.ToInt32(valHolder);
Run Code Online (Sandbox Code Playgroud)

一旦objSqlCommand.ExecuteScalar().ToString(); 执行时,抛出错误.记录被插入到表中但是ExecuteScalar()不返回任何值!它应该返回当前最新的自动递增的pk,但它不会.

注意:执行此行时,将抛出上面提到的所有错误

valHolder = objSqlCommand.ExecuteScalar().ToString(); 
Run Code Online (Sandbox Code Playgroud)

这是完整的错误:

System.NullReferenceException was caught
  Message="Object reference not set to an instance of an object."
  Source="........"
  StackTrace:
       at ......DAL.ExecuteSQL(SqlCommand sqlCmd, String typeOfExecution) in C:\Users\....\Desktop\........\DAL.cs:line 136
  InnerException: 
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

.net c# ado.net

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

BadImageFormatException:PInvoke ImportDll with hdf5dll.dll

好的,我从官方网站下载了HDF5库,我有一些DLL,包括hdf5dll.dll和hdf5_hldll.dll.

我有我的想法是围绕本地调用一些包装,在我的课H5,H5LT,H5F,和H5T.来自H5.cs的示例:

namespace HDF5
{
    using hid_t = System.Int32;
    using herr_t = System.Int32;
    using hsize_t = System.UInt64;
    using size_t = System.UInt32;
    // hbool_t is 0:false, +:true
    using hbool_t = System.UInt32;
    // htri_t is 0:false, +:true, -:failure
    using htri_t = System.Int32;

    public class H5
    {
        const CharSet StringMarshallingType = CharSet.Ansi;
        const string DLLNAME = "hdf5dll.dll";
Run Code Online (Sandbox Code Playgroud)

        ///* Functions in H5.c */
        //H5_DLL herr_t H5open(void);
        [DllImport(DLLNAME,
            CharSet = StringMarshallingType)]
        public static extern herr_t H5open();
Run Code Online (Sandbox Code Playgroud)

在Program.cs中,我使用 …

c# pinvoke hdf5

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

当C#HTML解码不正常时,如何呈现实体

我正在尝试解码来自DB的字符串,如下所示:

所有Ablaze™ 攀登玫瑰.

使用WebUtility或HttpUtility HtmlDecode方法转为"™" 变成空白而不是"TM"符号.

是否有另一种方法可以为这种类型的字符串生成正确的输出?我的代码: System.Net.WebUtility.HtmlDecode(" All Ablaze ™ Climbing Rose.")

期望的输出:

所有Ablaze™登山玫瑰.

c# asp.net-mvc

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