Tag: C#的

从C ++ STL容器派生出来是否有真正的风险?

声称使用标准C ++容器作为基类是一个错误,这让我感到惊讶。 如果没有滥用语言来宣布… // Example A typedef std::vector<double> Rates; typedef std::vector<double> Charges; 那么,确切的说是… // Example B class Rates : public std::vector<double> { // … } ; class Charges: public std::vector<double> { // … } ; B的积极优势包括: 启用函数的重载,因为f(Rates&)和f(Charges&)是不同的签名 使其他模板成为专用的,因为X <费率>和X <费用>是不同的types 前向声明是微不足道的 debugging器可能会告诉你该对象是一个费率还是费用 如果随着时间的推移,利率和收费发展个性化 – 一个单一的利率,一个收费的输出格式 – 这个function有一个明显的实施范围。 A的积极优势包括: 不必提供构造函数的简单实现等 这个十五年前的标准编译器是唯一能够编译你的遗产的编译器,不会窒息 由于专业化是不可能的,所以模板X <费率>和模板X <费用>将使用相同的代码,所以没有无意义的膨胀。 这两种方法都优于使用原始容器,因为如果实现从vector <double>更改为vector […]

使用entity framework从存储过程获取数据

我试图从数据库上下文对象(使用Entity Framework 6.1.1)调用dynamicSQL存储过程来获取内容的表,以填充GridView控件。 我无法检索数据。 这是存储过程。 这是一个关于存储过程中的SQL注入的学生演示,所以我知道这是可注射的,没关系。 ALTER PROCEDURE dbo.SearchProducts @SearchTerm VARCHAR(max) AS BEGIN DECLARE @query VARCHAR(max) SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%''' EXEC(@query) END 我后面用来执行存储过程的C#代码是: var db = new MyEntities(); var TEST_SEARCH_TERM = "product"; var result = db.SearchProducts(TEST_SEARCH_TERM); MyGridView.DataSource = result; MyGridView.DataBind(); 执行时,在Visual Studio的数据库资源pipe理器中,存储过程正常工作。 但是当在正在运行的ASP.NET应用程序中执行时,我在DataBind()方法中得到一个exception,因为result返回-1而不是包含存储过程的SELECT产生的对象的IEnumerable DataSet […]

什么时候添加SqlCommand参数时应该使用“SqlDbType”和“size”?

有一个相关的问题: 将parameter passing给SQLCommand的最佳方法是什么? 但我想知道这些差异是什么,以及是否有不同的方式有任何问题。 我通常使用这样的结构: using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(SQL, conn)) { cmd.CommandType = CommandType.Text; cmd.CommandTimeout = Settings.Default.reportTimeout; cmd.Parameters.Add("type", SqlDbType.VarChar, 4).Value = type; cmd.Connection.Open(); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { adapter.Fill(ds); } //use data } 现在有几种方法来添加cmd参数,我想知道哪个是最好的: cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob"; cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob"; cmd.Parameters.Add("@Name").Value = […]

如何从进程ID获取主窗口句柄?

如何从进程ID获取主窗口句柄? 我想把这个窗口放在前面。 它在“Process Explorer”中运行良好。

我如何使用Moq来模拟扩展方法?

我正在编写一个testing,这个testing取决于扩展方法的结果,但是我不希望这个扩展方法的未来失败破坏这个testing。 嘲笑这个结果似乎是一个明显的select,但Moq似乎并没有提供一种重写静态方法的方法 (对扩展方法的要求)。 Moq.Protected和Moq.Stub也有类似的想法,但是似乎并没有提供这种情况。 我是否错过了一些东西,或者我应该以这种不同的方式去思考? 这是一个简单的例子,失败与通常的“对不可覆盖的成员无效的期望” 。 这是一个不好的例子,需要模拟一个扩展方法,但它应该做的。 public class SomeType { int Id { get; set; } } var ListMock = new Mock<List<SomeType>>(); ListMock.Expect(l => l.FirstOrDefault(st => st.Id == 5)) .Returns(new SomeType { Id = 5 }); 至于任何可能build议我使用隔离器的TypeMock瘾君子:我很欣赏这样的努力,因为它看起来像TypeMock可以做蒙住眼睛和醉酒的工作,但我们的预算不会很快增加。

LINQ语句比“foreach”循环更快吗?

我正在编写一个Mesh渲染pipe理器,并认为将所有使用相同着色器的网格进行分组,然后在我处于该着色器渲染阶段时渲染这些网格将是一个好主意。 我目前正在使用一个foreach循环,但想知道如果使用LINQ可能会使我的性能提高?

使用RegEx来平衡匹配括号

我正在尝试创build一个.NET正则expression式,将正确地平衡我的括号。 我有以下正则expression式: func([a-zA-Z_][a-zA-Z0-9_]*)\(.*\) 我想匹配的string是这样的: "test -> funcPow((3),2) * (9+1)" 正则expression式应该匹配从funcPow到第二个funcPow括号的所有内容。 它应该在第二个右括号之后停止。 相反,它一直匹配到最后一个右括号。 RegEx正在返回这个: "funcPow((3),2) * (9+1)" 它应该返回这个: "funcPow((3),2)" 任何帮助,将不胜感激。

如何从客户端JavaScript函数调用服务器方法背后的代码?

我在ASPX页面中有一个HTMLbutton点击事件的JavaScript函数。 而在其代码页面中的一个服务器方法。 现在我只想在用户点击HTMLbutton的时候,用一些参数从JavaScript函数调用服务器方法。 请不要更改这个场景,也不要在回复的时候在aspx页面中使用任何的asp.net控件。 因为只允许HTML控件。 任何人都可以帮助我吗? 提前致谢。 急切地等待答案。 这里是代码, 代码在标记: <script language="javascript" type="text/javascript"> function btnAccept_onclick() { var name; name = document.getElementById('txtName').value; // Call Server side method SetName() by passing this parameter 'name' </script> <input type="button" id="btnAccept" value="Accept" onclick="return btnAccept_onclick()" /> 代码隐藏: public void SetName(string name) { // Code for some functionality }

如何检测Console.In(stdin)是否已被redirect?

我想编写一个具有不同行为的控制台应用程序,具体取决于input来自键盘还是来自文件。 可能吗? 在C#中最优雅的方式是什么?

在C#中的generics类的算术运算符重载

给定一个通用的类定义 public class ConstrainedNumber<T> : IEquatable<ConstrainedNumber<T>>, IEquatable<T>, IComparable<ConstrainedNumber<T>>, IComparable<T>, IComparable where T:struct, IComparable, IComparable<T>, IEquatable<T> 我怎样才能为它定义算术运算符? 以下不编译,因为“+”运算符不能应用于types“T”和“T”: public static T operator +( ConstrainedNumber<T> x, ConstrainedNumber<T> y) { return x._value + y._value; } genericstypes'T'受到'where'关键字的约束,正如你所看到的,但是我需要一个具有算术运算符(IAalgorithm)的数字types的约束。 'T'将是一个原始数字types,如int,float等。这种types是否存在“where”约束?