首先,我知道这个问题之前已被问过几次,最后,这主要是个人偏好的问题,但阅读有关该主题的所有主题,有些事情对我来说并不清楚.
基本上,大多数人都同意的一点是,公共成员应该是PascalCased而私人成员应该是低级的.CamelCased.
通常引发争论的问题是是否用私人成员或其他任何东西作为私人成员的前缀.前缀违反了几个StyleCop规则(显然可以关闭)
不加前缀的基本原理是你应该使用它.改为加前缀.
我遇到的问题是我不明白它是如何产生影响的?我的意思是,并不是说你不能在课堂上的公共成员上使用它.
让我们想象一下Customer类,看起来像这样:
class Customer
{
private int age;
public int Age
{
get { return this.age; }
set { this.age = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
(显然,在这么简单的情况下,我可以使用autoproperty,但这只是一个例子).
如果我在这个类中添加了第二个属性,没有什么能阻止我使用this.Age(公共属性)而不是this.age(私有字段)来引用它.有时候,如果在getter级别应用了一些验证或格式化,它甚至可以被发现.
此外,如果我的类的其他一些属性需要修改客户的Age,那么直接使用属性而不是后备字段是有意义的,因为setter也可以实现一些业务规则验证,对吧?
换句话说,我真的不知道this关键字如何避免私有支持成员和公共属性之间的混淆,因为这可以在两者上使用并且IntelliSense显示两者?
谢谢.
我有一个小的,一行更改(修改字符串中的拼写错误),我想尽快部署到我们的生产SQL Server 2005服务器的存储过程.
我担心的是如果在确切的时间运行alter语句来更新我的存储过程会发生什么事情,它会发生同时调用该存储过程的事情?
它是使用存储过程的先前副本运行的,还是会导致某些损坏或错误?
考虑到SQL Server的ACID性质,我希望它是安全的.它在同一时间运行的可能性,特别是因为SP非常小,非常低,但我更愿意确定,而且我也对答案感兴趣,仅用于教育目的.
可以说,ServerFault会是一个更好的地方,对不起,如果错误的话.
谢谢.
在我的一个WinForms应用程序中,我有一个带有ComboBox的窗口供用户从中选择客户.
此列表框中的客户采用以下格式:"CustomerID - CustomerName",例如"004540 - NorthWind Traders"
本机WinForms组合框具有内置的自动完成功能,它运行良好:问题是它只能通过从组合框列表的每个项目的字符串的开头匹配而不是从任何地方(子字符串)进行匹配.
我希望我的用户能够做到的是CustomerID或CustomerName的类型,因为高级用户熟悉大多数CustomerID,而新员工可以从中输入CustomerName并获得AutoComplete.这意味着我实际上想从列表中寻找最佳匹配,其中输入的文本是ComboBox项的子字符串.
通常建议用于这种情况的解决方案是创建一个隐藏的列表框,仅在用户输入时显示,但我对此不满意,因为它感觉像是一个快速的黑客并且不容易重复使用,并且可能看起来和与标准ComboBox控件相比,行为不一致.
我已经尝试使用DroppedDown属性来实现这一点,使列表出现并使用SelectedIndex来设置项目,但是当我这样做时,组合框的文本框的内容被重置,而我只想要"最匹配的项目"来从ComboBox列表中突出显示(我需要"建议"而不是"追加",无论如何,追加模式都不能与子串匹配一起使用).
我认为必须有更好的方法吗?如果有人知道自定义/第三方控制这样做,我也不反对买一个.
谢谢.
PS:我使用.Net Framework 3.5在WinForms的C#中编程.
我想报告用C#编写的WinForm应用程序中的操作状态.为了使其更加用户友好,我想在左侧显示一个图标,具体取决于状态.
我想使用原生的WinForms Label控件,该控件适用于动画GIF并且看起来尽可能标准.
然而,我的问题是文字出现在图片上.似乎没有任何属性可以为文本设置边距.我尝试了最显而易见的事情,即在它前面加上空格,这有效,除非文本换行到下一行,如下所示.

如果可能的话,我宁愿不花太多时间编写/测试/调试派生控件......我可以放一个快速而脏的用户控件,在标签的左边有一个图片框,但是感觉不是很好清洁.
是否有任何技巧可以快速优雅地解决这个问题,或者有人可以指向我支持相对轻量级的Label派生类?(我看过CodeProject但找不到多少).
谢谢.
我目前正在处理DataGridView控件的KeyDown事件.其中一列由计算值填充,我希望用户能够在需要时覆盖单元格值.
当用户按下数字键时,单元格进入EditMode并允许用户覆盖该值.如果密钥不是数字,则没有任何反应......
这工作得很好......问题是我找到了丑陋的代码...我似乎无法找到一个简单的方法来处理单一条件下的所有数字键,所以我做了一个开关case构造来处理所有可能的数字键,如下所示:
switch (e.KeyCode)
{
case Keys.D0:
case Keys.D1:
case Keys.D2:
case Keys.D3:
case Keys.D4:
case Keys.D5:
case Keys.D6:
case Keys.D7:
case Keys.D8:
case Keys.D9:
case Keys.Decimal:
case Keys.NumPad0:
case Keys.NumPad1:
case Keys.NumPad2:
case Keys.NumPad3:
case Keys.NumPad4:
case Keys.NumPad5:
case Keys.NumPad6:
case Keys.NumPad7:
case Keys.NumPad8:
case Keys.NumPad9:
[code to make the cell go to editMode, etc...]
Run Code Online (Sandbox Code Playgroud)
当然,它有效,但必须有更好更短的方式,对吧?
我用谷歌找到的只是将e.KeyCode转换为char,但是当使用数字键时,它甚至会为数字值提供字母......
谢谢.
为DataGridView实现验证逻辑代码和条件格式代码的最佳位置是什么?
在我阅读过这个控件的很多书籍和文章中,它似乎表明要处理的相应事件是CellValidating.嗯,这个名字也意味着这一点.
但是,这个事件对我的口味有点过于频繁,我不确定是否需要.例如,此事件会在用户切换到另一行时触发.
另一方面,CellValueChanged事件似乎仅在单元格值更改时触发,这意味着验证代码仅在值更改时运行,而不是每次用户更改单元格时运行.
现在,由于很多书都使用了CellValidating事件,我想知道使用CellValueChanged是否有任何问题(例如显示)?
我理解在使用简单验证和条件突出显示规则时,性能的影响应该是无关紧要的,但是如果可以避免的话,我希望每次用户移动到另一个单元时都不会运行无用的代码.
谢谢,
我编写了一个表值UDF,它以CTE开头,从大表中返回行的子集.CTE中有几个连接.一对内部和一个左边连接到其他表,这些表不包含很多行.CTE有一个where子句,它返回日期范围内的行,以便只返回所需的行.
然后,我在4个自左连接中引用此CTE,以便使用不同的标准构建小计.
查询非常复杂,但这是一个简化的伪版本
WITH DataCTE as
(
SELECT [columns] FROM table
INNER JOIN table2
ON [...]
INNER JOIN table3
ON [...]
LEFT JOIN table3
ON [...]
)
SELECT [aggregates_columns of each subset] FROM DataCTE Main
LEFT JOIN DataCTE BananasSubset
ON [...]
AND Product = 'Bananas'
AND Quality = 100
LEFT JOIN DataCTE DamagedBananasSubset
ON [...]
AND Product = 'Bananas'
AND Quality < 20
LEFT JOIN DataCTE MangosSubset
ON [...]
GROUP BY [
Run Code Online (Sandbox Code Playgroud)
我觉得SQL Server会感到困惑并为每次自我加入调用CTE,这似乎通过查看执行计划得到了证实,尽管我承认自己并不是那些阅读它们的专家.
我会假设SQL Server足够聪明,只能从CTE执行一次数据检索,而不是多次执行.
我尝试了相同的方法,但不是使用CTE来获取数据的子集,我使用了与CTE中相同的选择查询,而是将其输出到临时表.
引用CTE版本的版本需要40秒.引用临时表的版本需要1到2秒.
为什么SQL Server不够智能,无法将CTE结果保留在内存中? …
我有一个使用强类型数据集的项目.
假设我想要更改此应用程序使用的数据库的数据库模式.我有一个名为Country的表,我想添加一个名为"IsADemocracy"的新列(这是一个例子)的SQL Server数据类型BIT.
现在,如何更新强类型数据集,以便在应用程序中使用此新字段?
我已经尝试在数据集的Country表中添加列,给它布尔类型,并将其"Source"属性映射到"IsADemocracy".
我可以访问应用程序中的字段,给它一个值等,但表适配器所做的基础查询尚未更新以反映此更改.它们就像我在强类型数据集中添加此列之前一样.我希望我所做的就足够了,但似乎并非如此.
我应该以某种方式重新生成强数据集类吗?如果是这样,那么影响如何?
我可以删除数据集设计器中的Country表,并从Server Explorer中重写它,但我有客户查询,我不想丢失它们.
谢谢.
在前几天寻找完全不同的东西时,我偶然发现了两个用于在.NET中进行Fluent验证的库.这个概念看起来很有趣,因为到目前为止,我正在使用通常的条件语句和分支语句(if,else,case等)进行验证.
特别是,它可以相对容易地链接一些条件,这些条件可能导致某些情况下复杂条件的较短代码,并为同一对象中的每个违规嵌入若干错误消息.
也就是说,是不是也让代码看起来比C#通常更冗长,有时候有点像T-SQL ......并且这不会导致代码具有不一致的外观和感觉?
简而言之,您如何看待Fluent Validation,如果您喜欢它,您认为哪个库最适合它?到目前为止,我已经看过http://tnvalidate.codeplex.com/和http://fluentvalidation.codeplex.com/,乍一看似乎或多或少等同......
谢谢.
在我用C#编写的WinForms应用程序中,我有一个DataGridViewTextBoxColumn,单元格保存整数值,我希望用户能够使用键盘中的+和 - 键递增或递减.
我已经处理了KeyDown事件,因为它通常用于处理Delete键等,但它不适用于Plus和Minus键,因为按下它们会导致Cell进入编辑模式,而KeyDown事件是因此从未为这些键发射过.KeyPress事件也是如此
实际上,如果我将单元格设置为只读,则会被触发,但我对此解决方案不满意,因为它会迫使我在代码的几个区域中将属性从true设置为false,并且很快就会变得混乱.
什么会成为实现这一目标的最佳方式?
谢谢.
c# ×7
.net ×4
winforms ×4
datagridview ×3
sql-server ×2
acid ×1
ado.net ×1
autocomplete ×1
combobox ×1
fluent ×1
keydown ×1
keypress ×1
label ×1
performance ×1
temp-tables ×1
validation ×1