小编mez*_*oid的帖子

在什么情况下应该将成员函数声明为朋友?

在什么样的情况下我们会将成员函数声明为"朋友函数"?具体目的是什么'朋友函数'违背了OOP服务的'封装'的核心概念之一?

c++ function friend

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

我如何使用System.Data.DataTableExtensions的CopyToDataTable方法?

我想使用DataTableExtensions中提供的CopyToDataTable方法创建一个给定List的数据表.我之前已经问过如何将List转换为DataSet的问题?CMS获得了一个特殊的答案,通过创建扩展来实现我想要的public static DataTable ToDataTable<T>(this IEnumerable<T> collection)

我一直在使用他的建议......但最近我在博客中看到已经存在这样的扩展...... CopyToDataTable<T>(this IEnumerable<T> source) : DataTable存在于System.Data.DataTableExtensions中.

因此,我认为我应该切换到使用这种内置的扩展方法,而不是使用我必须维护自己的方法.

不幸的是,我在弄清楚如何使用它时遇到了一些麻烦.

我可以使用我的IList并说myListofMyClass.CopyToDataTable()但是我得到一个编译错误,说"类型'MyClass'必须可以转换为'System.Data.DataRow'才能在通用中用作参数'T'方法..."

有什么特别的东西我需要做MyClass才能使它可以转换为System.Data.DataRow吗?我需要实现一些接口吗?

c# datatable generic-list

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

有没有更好的方法在C#3.0中编写这行C#代码?

我有一个声明如下的属性:

public decimal? MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

我需要将此值作为字符串传递给另一个方法,因此我看到这样做的唯一方法如下:

MyProperty == null ? null : MyProperty.ToString()
Run Code Online (Sandbox Code Playgroud)

当您将许多类似的属性传递给方法时,这看起来非常混乱.

有谁知道是否有更好,更简洁的写作方式?

哦,如果有人能想到这个问题的更合适的标题,请随时改变它...

nullable properties c#-3.0

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

如何使用TortoiseSvn找到在我的代码中更改了一行的修订版?

我有一行似乎评论的代码.基本上我想找到的是修改代码中的这一行.

那么,是否可以在TortoiseSvn Log中看到与特定关键字相关的代码更改?

tortoisesvn search logging keyword revisions

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

为什么即使返回类型不同,也不能使用相同的签名声明两个方法?

重复:函数重载按返回类型?


也许这是一个非常愚蠢的问题,但我不明白为什么我不能声明两个具有相同签名的方法,当它们具有不同的返回类型时.

public class MyClass
{
    private double d = 0;

    public double MyMethod()
    {
        return d;
    }

    public string MyMethod()
    {
        return d.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误,指出该类已经定义了具有相同参数类型的成员.

(显然,我在我的代码中使用它的方式并不像我的示例代码那么简单......但我认为它可以解决这个问题.)

我是否遗漏了有关OO设计的内容,这使得我正在尝试做一个OOP反模式?当然,编译器应该能够确定我尝试使用哪种方法,只要我具体告诉它我想要哪一种方法.

鉴于MyClass myClass = new MyClass();我希望以下代码可以工作:

double d = myClass.MyMethod();
string s = myClass.MyMethod();
Run Code Online (Sandbox Code Playgroud)

我希望以下代码有问题:

var v = myClass.MyMethod();
Run Code Online (Sandbox Code Playgroud)

但即使在var它的情况下也应该导致编译错误.

谁能看到我在这里做错了什么?我很高兴得到纠正.:-)

c# method-signature

4
推荐指数
2
解决办法
9329
查看次数

return语句是否可以阻止using语句关闭与数据库的连接?

当我创建临时表时,我收到一条错误消息,告诉我临时表已经存在.临时表对于会话是唯一的,所以看起来我的连接没有正确关闭,我认为它可能与我在using语句中的return语句有关.

我有以下代码:

using (IDbConnection connection = dbConnectionHandler.CreateConnection())
{
   connection.Open();
   CreateATempTable();
   PopulateTempTable();
   DataSet ds = CallStoredProcThatUsesTempTable();
   return ds;
}
Run Code Online (Sandbox Code Playgroud)

我在几个地方使用这种代码来创建一个具有相同名称的临时表.

不幸的是,我收到以下错误:There is already an object named '#MyTempTable' in the database.

现在,我知道临时表对于会话是唯一的,因此一旦会话关闭它就会消失.

我认为有三件事可能会导致这种情况......

  1. 我需要调用connection.Close()
  2. 我需要将return语句放在using语句之外
  3. 我需要在返回之前删除我创建的临时表

有谁知道它是哪一个?或者如果它没有想到的东西?

c# using-statement temp-tables dbconnection

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

如果DataSet中的项可能为null,我如何正确地转换它?

我有一个由存储过程返回的数据集,其中一个项可能为null.我正在尝试将数据集中的每一行转换为强类型对象,但我似乎无法正确转换空值.

我创建了一个模拟我的场景如下:

DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("Name", typeof(string));
ds.Tables[0].Columns.Add("Amount", typeof(decimal));
ds.Tables[0].Rows.Add("My Name Here", null); //create row with a null item

DataRow dataRow = ds.Tables[0].Rows[0];

Person p = new Person
{ 
    Name = (string)dataRow["Name"], 
    Amount = (decimal)dataRow["Amount"]
}
Run Code Online (Sandbox Code Playgroud)

不幸的是我得到以下异常: System.InvalidCastException: Specified cast is not valid.

如果我尝试使用可空类型(十进制?),我会收到此错误: System.NotSupportedException: DataSet does not support System.Nullable<>.

在调试器中,我对dataRow ["Amount"]中的值进行了以下测试:

dataRow["Amount"] is decimal (false)
dataRow["Amount"] is decimal? (false)
dataRow["Amount"] == null (false)
dataRow["Amount"] is object (true)
Run Code Online (Sandbox Code Playgroud)

我所能确定的只是它是某种对象......这不是特别有用.

你们有谁能发现我做错了什么?

c# null casting dataset

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

我在哪里可以找到.NET v1.0.5000.0?

我刚刚在我的工作场所获悉,我们有一个用于生产的应用程序已经停止工作.我正在尽我所能地找到应用程序的源代码在我们的源代码控制中但没有太多运气.我真的希望这不是一个在本地机器上开发的应用程序,而且从不检查源代码控制.

看来这个应用程序已经很老了,原来的开发人员早就不见了.为了找到关于这个应用程序的更多信息,我使用了.NET Reflector来查看...我发现它引用了mscorlib,System,System.Data,System.Drawing和System.Windows .Forms但所有这些都声明它们是版本1.0.5000.0.

这怎么可能?难道这是一个针对.NET 1.0框架开发的应用程序,从那时起就一直在生产中?如果.NET 1.0安装在可能运行的机器上,或者.NET 3.5向后兼容,是否可能.

如果我能找到应用程序的源代码,那么查找.NET v1.0.5000.0将是一件小事......但如果没有,我可能需要弄清楚如何让这个应用程序在我们当前的环境中运行...

.net-1.0

4
推荐指数
2
解决办法
389
查看次数

是否有可能在单元测试中模拟出时间?

这个问题之后......我正在尝试对以下场景进行单元测试:

我有一个类允许一个方法调用一个方法来执行某些操作,如果它失败等待一秒钟并重新调用该方法.

假设我想调用方法DoSomething()...但是如果DoSomething()抛出异常,我希望能够重试最多调用它3次,但每次尝试之间等待1秒.在这种情况下,单元测试的目的是验证当我们调用DoSomething()3次,每次重试之间等待1秒钟时,总时间> = 3秒.

不幸的是,我能想到测试它的唯一方法是使用秒表来计时....它有两个副作用......

  1. 执行测试需要3秒......我通常喜欢我的测试以毫秒运行
  2. 运行测试的时间长度变化+/- 10ms左右,这可能导致测试失败,除非我考虑到这种差异.

如果有一种方法可以模拟出这种依赖性,那么我的测试能够更快地运行并且在结果中相当一致,那会更好.不幸的是,我想不出办法这么做......所以我想我会问,看看你们中间是否有人遇到过这个问题......

time unit-testing mocking

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

你如何应对失败的单元测试?

我在解决方案文件中有许多项目,这些项目都为它们编写了单元测试,我希望将它们设置为由我们的持续集成服务器运行.但是,由于许多测试写得不好而且没有经常运行,因此有许多测试失败了.

我目前没有时间修复所有测试,但我相信现有测试运行是有价值的.处理失败的单元测试的最佳方法是什么?

我目前正在做的是将每个失败的测试标记为Explicit并留下TODO评论.

[Test, Explicit] //TODO: Rewrite this test because it fails
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?或者我应该在将它们包含在CIS运行的测试之前修复所有测试吗?

nunit unit-testing failing-tests

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